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 preserveCount] は 2 ではなく 1 を出力します。なぜですか?