- inline直接敲出block格式 returnType(^blockName)(parameterTypes) = ^(parameters) {
statements
};
- 作用:跟函数和方法很像,其实就是用来保存一段代码,等到恰当的时候再去使用
- 使用:逆传用block传值,处理网络的时候常使用block封装代码
- 利用block传值,需要把什么传递出去,就作为block参数,通常不需要返回值
一、block是不是一个对象?
答:是一个对象
二、如何判断当前文件是MRC,还是ARC
1.dealloc 能否调用super,只有MRC才能调用super
2.能否使用retain,release.如果能用就是MRC
三、内存管理
ARC管理原则:
只要一个对象没有被强指针修饰就会被销毁,默认局部变量对象都是强指针,存放到堆里面
MRC了解开发常识:
1.MRC没有strong,weak,局部变量对象就是相当于基本数据类型
2.MRC给成员属性赋值,一定要使用set方法,不能直接访问下划线成员属性赋值
MRC:管理block
只要Block引用外部局部变量,block放在栈里面.
block只能使用copy,不能使用retain,使用retain,block还是在栈里面
ARC:管理block
只要block引用外部局部变量,block放在堆里面
block使用strong,最好不要使用copy
共同特点:只要block没有引用外部局部变量,block放在全局区
四、为了防止循环retain
非ARC:如果所引用的对象用了__block修饰,就不会做retain操作
ARC:如果所引用的对象用了__unsafe_unretained/__weak修饰,就不会做retain操作
五、block细节
block外部:__weak typeof(self) weakself = self;
block内部:__strong typeof(weakself) strongSelf = weakself;
block1内部的block2在被调用时,防止访问的对象提前释放;具体请理解下面的总结。
- 如果【block内部】使用【外部声明的强引用】访问【对象A】, 那么【block内部】会自动产生一个【强引用】指向【对象A】
- 如果【block内部】使用【外部声明的弱引用】访问【对象A】, 那么【block内部】会自动产生一个【弱引用】指向【对象A】
网友评论