首先 Block分三种:
__NSStackBlock__ :栈上
__NSMallocBlock__ :堆上 , copy之后将在堆上
__NSGlobalBlock__ :block里没用到本地参数,一般不会出现这种情况
testHandle handle = ^() {
NSLog(@"%@", name);
};
name = @"fff";
self.handle = [handle copy];
self.handle2 = [handle copy];
NSLog(@"1:%p, 2:%p", self.handle, self.handle2);
结果:1:0x7feaeb6105f0, 2:0x7feaeb6105f0
所以栈blick 每次copy,地址都不同
testHandle handle = ^() {
NSLog(@"%@", name);
};
name = @"fff";
self.handle = [handle copy];
self.handle2 = [self.handle copy];
NSLog(@"1:%p, 2:%p", self.handle, self.handle2);
结果:1:0x7fcfc1e081c0, 2:0x7fcfc1e081c0
所以堆blick 每次copy,地址都相同