什么情况使用 weak 关键字,相比 assign 有什么不同?

2020-04-16  本文已影响0人  携YOU手同行

1.在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性。
2.自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。

IBOutlet连出来的视图属性为什么可以被设置成weak?
因为父控件的subViews数组已经对它有一个强引用。

不同点:
assign 可以用非 OC 对象,而 weak 必须用于 OC 对象。
weak 表明该属性定义了一种“非拥有关系”。在属性所指的对象销毁时,属性值会自动清空(nil)。

例如


@property (assign, nonatomic) NSMutableArray *infoArray;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    
    _infoArray = [[NSMutableArray alloc]init];
    [_infoArray addObject:@"1"];
    NSLog(@"相关修饰符的做  %@",_infoArray);

}

利用assign修饰数组对象,也可以进行增加和删除操作,打印日志如下

2020-04-16 16:37:39.585598+0800 内存管理[5152:240318] 相关修饰符的做  (
    1
)

但是如果用weak去修饰一个非oc对象,就会报错


图片.png
上一篇下一篇

猜你喜欢

热点阅读