我已经测试了以下代码。
// 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 就会被调用。会有什么问题?