什么是block循环引用?就会形成循环引用这种情况在iOS开发中要特别注意因为可能会导致内存泄漏
什么是block循环引用?
block循环引用是指当你创建了一个block,并且这个block又直接或间接地持有某个对象的强引用时,就会形成循环引用。这种情况在iOS开发中要特别注意,因为可能会导致内存泄漏。
masonry的block方法实现
masonry是一个强大的布局框架,它的实现中并没有使用到会导致block循环引用的方法。我们来看看源码就知道,masonry在设置布局的时候,不会将block对象引用给View,而是直接在方法内部同步执行。执行完毕后,block就会被释放,外部变量的引用计数也会回到之前的状态。
哪些block不会造成循环引用?
并不是所有的block都会造成循环引用,以下几种情况不会:
类型 | 原因 |
---|---|
UIView动画block | 这是类方法,不能强引用一个类,所以不会形成循环引用。 |
Masonry约束block | self并没有持有block,所以使用Masonry时不需要担心循环引用。 |
AFN网络请求回调block | AFN内部已经处理好了,不会造成循环引用。 |
什么是iOS?
简单来说,iOS是苹果公司开发的移动操作系统。它最初是为iPhone设计的,后来也应用到了iPod touch和iPad上。iOS和macOS一样,是基于Unix的商业操作系统。这个名字最早叫iPhone OS,后来因为iPod touch和iPad也使用这个系统,所以苹果在2010年将其更名为iOS。这个命名变更是因为iOS的名字之前已经被美国思科公司注册为网络设备操作系统的商标,苹果公司后来获得了思科的授权。