MyBlock getBlocks()
{
MyBlock myBlock = ^{
NSLog(@"Hello World!");
};
return myBlock;
}
int main(int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
MyBlock myBlock = getBlocks();
myBlock();
[pool drain];
return 0;
}
为什么这段代码有效?myBlock 应该被销毁。
顺便说一句,这个片段也有效:
NSObject *obj = [[NSObject alloc] init];
NSLog(@"%ld", [obj retainCount]);
MyBlock myBlock = ^{
NSLog(@"Hello World!");
NSLog(@"%ld", [obj retainCount]);
};
[obj release];
但是块中的 [obj retainCount] 打印 1 而不是 2,为什么?