iOS masonry为什么没有导致循环引用

block循环引用的前提条件是调用对象直接或者间接对block持有强引用。而masonry的block方法实现中并不涉及。查看masonry源码可以看到究竟:masonry中设置布局的方法中的block对象并没有被View所引用,而是直接在方法内部同步执行,执行完以后block将释放。

block循环引用的前提条件是调用对象直接或者间接对block持有强引用。而masonry的block方法实现中并不涉及。

查看masonry源码可以看到究竟:masonry中设置布局的方法中的block对象并没有被View所引用,而是直接在方法内部同步执行,执行完以后block将释放,其中捕捉的外部变量的引用计数也将还原到之前。

在block中,并不是所有的block都会循造成环引用,比如UIView动画block、Masonry添加约束block、AFN网络请求回调block等。

UIView动画block不会造成循环引用是因为这是类方法,不可能强引用一个类,所以不会造成循环引用。

Masonry约束block不会造成循环引用是因为self并没有持有block,所以我们使用Masonry的时候不需要担心循环引用。

AFN请求回调block不会造成循环引用是因为在内部做了处理。

延伸阅读:

什么是iOS?

iOS是由苹果公司开发的移动操作系统。 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad、iPhone、iPod touch都使用iPhone OS,所以2010年苹果全球开发者大会上宣布改名为iOS(iOS为美国思科公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。

文章标题:iOS masonry为什么没有导致循环引用,发布者:Flawy,转载请注明出处:https://worktile.com/kb/p/52999

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Flawy的头像Flawy

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部