美文网首页
iOS开发常见问题-block使用细节

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

作者: 年轻岁月 | 来源:发表于2016-07-31 23:11 被阅读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在被调用时,防止访问的对象提前释放;具体请理解下面的总结。
    
    • 如果【block内部】使用【外部声明的强引用】访问【对象A】, 那么【block内部】会自动产生一个【强引用】指向【对象A】
    • 如果【block内部】使用【外部声明的弱引用】访问【对象A】, 那么【block内部】会自动产生一个【弱引用】指向【对象A】

    相关文章

      网友评论

          本文标题:iOS开发常见问题-block使用细节

          本文链接:https://www.haomeiwen.com/subject/rdrxsttx.html