オブジェクトはすぐに解放されません。 おそらくオブジェクトが実際にリリースされる前に実行ループサイクルが必要です。
ただし、retainCountの呼び出しは実際には意味があります。理由をお読みください:When to use -retainCount?
EDIT:@ kris-van-baelはこの回答にコメントしました - 正しく - ドキュメントに基づいて、これは真実ではありません。だから、私がここに書いたのは、この問題をiOSシミュレータでテストすることに基づいているということを明確に述べなければならない。それはどういうわけかではない。はになるはずだ。
@interface Test : NSObject { }
@property (retain, nonatomic) NSString *test;
@end
@implementation Test
@synthesize test;
@end
を次にどこかにあなたのコードの書き込みに:しかし、それは、次のコードがエラーなしで実行されますように思わ
Test* t = [[Test alloc] init];
t.test = @"Test1";
NSLog(@"%@", t.test);
[t release];
t.test = @"Test2";
NSLog(@"%@", t.test);
は、この(生憎)のiOSシミュレータ上でエラーなしで実行されます(ただし、それを実行しますデバッガで段階的にクラッシュする)ので、明らかにiOSのオブジェクトの割り当てを解除するトリックがあります。
これは間違っていますが、 'autorelease'はイベント処理の終了時まで延期されますが、 'release'はすぐに実行されます。 –
はい。それは理論であり、すべての状況で真実でなければならない。しかし、私は小さなiOSアプリケーション(シミュレータでテスト済み)を作成しましたが、Testクラスのインスタンスを解放した後も、私はまだプロパティ値を取得できました。フレームワークがdeallocを呼び出す際にいくつかの遅れを出すようです...プログラムをステップバイステップで実行すると、正しいBAD ACESSが得られます(試してみてください)...) – Moszi
'release'は即時です。問題は、 'dealloc'の後の動作が未定義であることです。このシステムは、割振り解除されたメモリに書き込むサイクルを無駄にしないので、「未定義」は「まだ半永久的」を意味する可能性があります。 – bbum