美文网首页
Objective-C高级编程

Objective-C高级编程

作者: 木子影 | 来源:发表于2018-10-10 16:41 被阅读14次

    脑子生锈,理解能力速降,这本书怕是要读好几遍。不整篇抄了,说说里面的问题,或者说理解起来需要蛮久的东西记录一下。

    一:ARC无效时,再不同的作用域对block赋值时,如果不使用copy,block不会复制到堆上,那么当作用域结束时block被释放,调用block就会报错。但是按照书上的例子实验,并没有报错。我按照思路复现了书上讲到的场景,如下:

    void setBlock(blk_a * blk) {
        id array = [[NSMutableArray alloc] init];
        //不使用copy,打印的blk是 __NSMallocBlock__ 类型
        *blk = [^(id obj){
            [array addObject:obj];
            NSLog(@"array count = %ld",[array count]);
        } copy];
        //不使用copy,打印的blk是 __NSStackBlock__ 类型
    //    *blk = ^(id obj){
    //        [array addObject:obj];
    //        NSLog(@"array count = %ld",[array count]);
    //    };
        NSLog(@"%@",[*blk class]);
        NSLog(@"%p",blk);
    }
    int main(int argc, const char * argv[]) {
      
        blk_a  blk = nil;
        
        setBlock(&blk);
        
        NSLog(@"%p",blk);
        blk([[NSObject alloc] init]);
        blk([[NSObject alloc] init]);
        blk([[NSObject alloc] init]);
        NSLog(@"%@",[blk class]);
        NSLog(@"%p",blk);
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:Objective-C高级编程

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