美文网首页iOS归纳
什么情况使用 weak 关键字,相比 assign 有什么不同

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

作者: 一个半吊子工程师 | 来源:发表于2020-08-13 21:31 被阅读0次

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

答:

什么情况使用weak关键字?

ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如:
delegateblock,自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak
自定义 IBOutlet 控件属性一般也使用weak,使用 storyboard(xib 不行)创建的 vc,会有一个叫 _topLevelObjectsToKeepAliveFromStoryboard 的私有数组强引用所有 top level 的对象,所以这时即便 outlet 声明成 weak也没关系。当然,也可以使用 strong

weakassign的不同点:

weak 不会产生野指针问题。因为weak修饰的对象释放后(引用计数器值为0),指针会自动被置nil,之后再向该对象发消息也不会崩溃。 weak是安全的。
assign 如果修饰基本数据类型如int,float,struct等值类型则是安全的。如果修饰对象,会产生野指针问题;修饰的对象释放后,指针不会自动被置空,此时向对象发消息会崩溃。

站在巨人的肩膀上学习!如有侵权,请联系删除

相关文章

网友评论

    本文标题:什么情况使用 weak 关键字,相比 assign 有什么不同

    本文链接:https://www.haomeiwen.com/subject/fxtbdktx.html