iOS开发常见问题-block使用细节

2016-07-31  本文已影响29人  年轻岁月
- 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在被调用时,防止访问的对象提前释放;具体请理解下面的总结。
上一篇下一篇

猜你喜欢

热点阅读