次のコードをテストしました。
// Employee.h
@interface Employee : NSObject
@property(nonatomatic, copy) void (^print)(void);
@end
// Employee.m
@implementation Employee
@synthesize print = _print;
- (void)dealloc {
[_print release];
[super dealloc];
}
@end
// main.m
int main() {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
Employee* john = [[[Employee alloc] init] autorelease];
john.print = ^{
NSLog(@"block test %@", john);
};
[pool drain];
}
この場合、変数「john」の dealloc は呼び出されません。しかし、john 変数をログに記録しない場合 (NSLog(@"block test") のように)、dealloc が呼び出されます。何が間違っているでしょうか?