IOS block原理详解

2020-01-20  本文已影响0人  有梦想的狼

block的本质:

block底层结构

block的变量捕获:

block的类型:

block的copy:

@property (strong, nonatomic) void (^block)(void);
@property (copy, nonatomic) void (^block)(void);
@property (copy, nonatomic) void (^block)(void);

对象类型的auto局部变量:

__block修饰符:

添加__block的变量,编译器会将该变量包装成一个对象,如下图: 包装后

对象类型的__block局部变量

block循环引用:

对象持有block,block中又持有对象自己,会造成对象和block无法释放。

解决方案:

__weak修饰符

方法二:可以使用__unsafe_unretained修饰符(不会产生强引用,不安全,指向的对象销毁时,指针存储的地址值不变)。

__unsafe_unretained修饰符

方法三:可以使用__block修饰符(必须调用block,并在执行完block中的内容后,把修饰的该对象置为nil)。

__block修饰符 __unsafe_unretained

方法二:可以使用__block修饰符(因为在MRC中,__block不会对持有对象进行强引用retain)。

__block修饰符
上一篇 下一篇

猜你喜欢

热点阅读