避免block的循环引用

前言

https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxVariables.html#//apple_ref/doc/uid/TP40007502-CH6-SW3

循环引用:

 *对于非ARC下, 为了防止循环引用, 我们使用__block来修饰在Block中使用的对象:

 *对于ARC下
 为了防止循环引用, 我们使用__weak来修饰在Block中使用的对象。原理就是:ARC中,Block中如果引用了__strong修饰符的自动变量,则相当于Block对该变量的引用计数+1
eg.:

内存泄露例子:

当在block内部使用成员变量的时候。那么block是会对内部的对象进行一次retain。也就是说,self会被retain一次。当self释放的时候,需要block释放后才会对self进行释放,但是block的释放又需要等self的dealloc中才会释放。如此一来变形成了循环引用,导致内存泄露。

你可以copy一个block还

你可能感兴趣的:(iOS,进阶,iOS开发基础)