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