关于 ARC,我不明白一件事:我们现在应该如何处理使用创建的局部变量[... copy]
?如果我用(copy)
标志创建一个属性,ARC 会自动处理这个,但据我所知,变量没有__copy
标志。
我已经用这样的代码对此进行了测试:
@interface Foo : NSString
@end
@implementation Foo
- (void) dealloc {
NSLog(@"%p deallocated", self);
}
- (NSUInteger) length {
return 1;
}
- (unichar) characterAtIndex: (NSUInteger) i {
return 'x';
}
@end
- (void) foo {
Foo *f = [[Foo alloc] init];
NSLog(@"%p", f);
Foo *f2 = [f copy];
NSLog(@"%p", f2);
}
我得到的是:
0x102406530
0x102015f10
0x102406530 deallocated
我从来没有得到“0x102015f10 deallocated”,这表明复制的变量没有被释放。它甚至没有自动释放,因为当我创建另一个[Foo foo]
返回自动释放对象的方法时,我确实在片刻后收到了“已释放”消息。
那么有什么方法可以在不将其转换为属性的情况下释放它?