美文网首页
arc 下 [[[block copy] copy] copy

arc 下 [[[block copy] copy] copy

作者: 2d899c5242bd | 来源:发表于2017-09-11 10:47 被阅读235次

    测试代码

    typedef void (^blk)(void);
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            __weak blk weakBlk = nil;
            {
                __block int a = 1;
                
                blk obj = ^{a++;};
                blk obj2 = [[[obj copy] copy] copy];
                weakBlk = obj;
                NSLog(@"before release %@", obj2);
                NSLog(@"%@", weakBlk);
            }
            
            NSLog(@"%@", weakBlk);
        }
        return 0;
    } 
    

    输出结果

    2017-09-11 10:44:16.403783+0800 BlockTest[29910:11379291] before release <__NSMallocBlock__: 0x1004033a0>
    2017-09-11 10:44:16.403949+0800 BlockTest[29910:11379291] <__NSMallocBlock__: 0x1004033a0>
    2017-09-11 10:44:16.403968+0800 BlockTest[29910:11379291] (null)
    

    结论:it's ok.

    ps:retainCount 对于block对象真的不准确,不论在arc , 还是mrc下,持有block的对象是几个,输出的retainCount总是不会超过1。

    最后提两个问题

    1. __block变量转换后的结构体为什么需要带有 __forwarding的成员变量? 2. 为什么不是在Block结构体中追加一个自动变量指针类型的变量?

    相关文章

      网友评论

          本文标题:arc 下 [[[block copy] copy] copy

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