WEAK 和 UNOWNED

2018-12-21  本文已影响0人  limbo_lyn

相同

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

上一篇下一篇

猜你喜欢

热点阅读