WEAK 和 UNOWNED

相同

1、weak和unowned都不会增加引用计数器

2、两者都是为了避免循环引用而存在的


区别

1、weak指向的对象引用计数器为0时,weak为会自动赋值为nil,此时调用不会发生任何时

而unowned 并不会自动赋值nil,因此调用时,有可能调用对象本身(内存被释放,但是并没有重置),也有可能调用到野指针,不安全


2、unowned 不是可选类型,因此不需要判断strongself,即可使用,一般用于赋值

weak是可选的类型,因此需要判断strongself


总结

一般情况下 weak即可,只是在需要用到weak的赋值时,需要判断strongself

但是,如果使用环境下能判断对象一定没有被释放,使用unowned也会更方便,一般在按钮的响应事件中


快速使用方式

{  [unowned self, weak someObject]

    #code

}

参考

内存管理,WEAK 和 UNOWNED

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