ARCに関して私が理解していないことが1つあります。それは、を使用して作成されたローカル変数をどのように処理する必要があるかということ[... 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の割り当てが解除されました」というメッセージが表示されません。これは、コピーされた変数が解放されないことを示しています。[Foo foo]
自動解放されたオブジェクトを返す別のメソッドを作成したときに、しばらくしてから「割り当て解除」メッセージが表示されたため、自動解放されません。
それで、プロパティに変換せずにリリースさせる方法はありますか?