美文网首页
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