私が次のコードを持っているとしましょう:
@property (nonatomic, retain) *SomeObject foo;
@property (nonatomic, retain) *SomeObject bar;
@synthesize foo, bar;
self.foo = [[SomeObject alloc] init];
self.bar = [[[SomeObject alloc] init] autorelease];
if (self.foo) {
[self.foo release];
self.foo = nil;
}
if (self.bar) {
[self.bar release];
self.bar = nil;
}
self.barでメモリリークが発生します。理由はよくわかりませんが、[self.bar release]を呼び出した後、self.barが指しているオブジェクトが自動解放されるためだと思います。self.barをゼロにすると、前のオブジェクト(自動リリースされた)でreleaseを呼び出そうとしますが、これによりエラーが発生します。これは正しいです?また、おそらくfooで、他のメモリリークがありますか?正しい修正は何でしょうか?
リリースステートメントを削除して、両方のプロパティを削除する必要がありますか?