delegate用assign修饰还是weak修饰(iOS)

  MRC @property (nonatomic,assign) id<XXXDelegate> delegate;
  ARC @property (nonatomic,weak) id<XXXDelegate> delegate;

  weak和assign对传入的对象不会改变引用计数的变化。所以我们会发现delegate在MRC中是assign,在ARC中是weak。但是这两点有什么区别呢?两者都可以保证对传入的对象不会改变引用计数,但是weak对象必须是oc对象。weak比assign强大的地方就是在指向的对象销毁时,所有指向该对象的weak指针都会置为nil。这样我们就可以写出如此简洁的判断if (self.delegate && [self.delegate respondsToSelector:@selector(test:)])。而在MRC中,如果直接写这样的代码,如果调用者在对象销毁时未将delegate置为nil,delegate将变成野指针,而导致程序挂掉。所以在dealloc中[xxx release]前,加上xxx.delegate = nil。这也是为什么苹果官方推荐大家是用ARC,ARC在很多地方都可以保证程序的健壮性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容