相同
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
}
网友评论