UI021: 为什么控件的引用和控件的代理要用weak

1. 为什么控件的引用和控件的代理要用weak?

UI控件的引用关系图--为什么UI控件要用weak?

如果使用strong 修饰,会由2个强指针指向UIButton。但是没有必要。
这2个强指针,最终都是跟控制器相关的。一旦控制器销毁了,两个强指针也同时销毁了。其实只要有1个强指针指向UIButton即可。

拖线的时候,因为按钮已经加到控制器的View里面了。 已经有一根强指针引用了。
所以属性引用,使用weak关键字就够了,不需要使用2根强指针来引用。
@property(weak) IBOutlet UIButton *btn;
但是使用strong,也不会有错,只是推荐使用weak。


2. UI控件的代理,必须使用weak。

但是并不是所有的代理,都必须使用weak。
但是UI控件的代理,必须使用weak。
其他情况下,是可以使用strong的(视情况而定)。

代理的引用对象,为什么要使用weak修饰

strong会导致循环引用,所以代理要使用weak,就不会导致循环引用。

如果控件的delegate也使用strong,就会造成控件与控制器的循环引用。
这样就会有内存问题(内存泄漏)。
所以,控件的代理delegate,必须使用weak修饰。

控制器里面有View,其实控制器有个强指针指向view。
控件UIScrollView的代理,会指向控制器。循环引用了。
所以要把控件的代理,变成weak的。打破循环引用,不会造成内存泄漏。



2023/05/31 周三

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

推荐阅读更多精彩内容