日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

assign与weak区别(面试)

發布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 assign与weak区别(面试) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?weak?比?assign?多了一個功能就是當屬性所指向的對象消失的時候(也就是內存引用計數為0)會自動賦值為?nil?,這樣再向?weak?修飾的屬性發送消息就不會導致野指針操作crash。

可能不太好理解下面我寫了一個演示程序。

OC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//
// ViewController.m
// weak與assgin的區別
//
// Created by bihongbo on 14/5/20.
// Copyright (c) 2015年 畢洪博. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic,weak) id weakPoint;
@property (nonatomic,assign) id assignPoint;
@property (nonatomic,strong) id strongPoint;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.strongPoint = [NSDate date];
NSLog(@"strong屬性:%@",self.strongPoint);
self.weakPoint = self.strongPoint;
self.assignPoint = self.strongPoint;
self.strongPoint = nil;
NSLog(@"weak屬性:%@",self.weakPoint);
// NSLog(@"assign屬性:%@",self.assignPoint);
}
@end

當程序中的注釋被打開時,運行程序有可能會崩潰(有時候不崩潰,你可能需要多運行幾次),這是因為當?assign?指針所指向的內存被釋放(釋放并不等于抹除,只是引用計數為0),不會自動賦值?nil?,這樣再引用?self.assignPoint?就會導致野指針操作,如果這個操作發生時內存還沒有改變內容,依舊可以輸出正確的結果,而如果發生時內存內容被改變了,就會crash。

結論:在?ARC?模式下編程時,指針變量一定要用?weak?修飾,只有基本數據類型和結構體需要用?assgin?,例如?delegate?,一定要用?weak修飾。

轉載于:https://www.cnblogs.com/it-k-50/p/5857796.html

總結

以上是生活随笔為你收集整理的assign与weak区别(面试)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。