例deallocメソッドでnilにプロパティを設定すると、どうなりますか?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
私は、ソートの仮想セッターが呼び出されることを推測します。しかし、ここではどんなことが起こりますか?どうして?
例deallocメソッドでnilにプロパティを設定すると、どうなりますか?
-(void)dealloc {
self.myOutletProperty = nil;
[super dealloc];
}
私は、ソートの仮想セッターが呼び出されることを推測します。しかし、ここではどんなことが起こりますか?どうして?
Nilはnullと同じですが、オブジェクトに対してです。それはオブジェクトを意味しません。
ドットシンタックスは、[self setMyOutletProperty:nil]を呼び出すのと同じです。
したがって、一部のプロパティからオブジェクトを削除するだけです。意味はあなたが話している財産によって決まります。プロパティタイプ1.If
は "コピー" 又は "保持"、次いで
self.myOutletProperty =ゼロです。 [myOutletProperty release]と同じです。プロパティタイプ2.Ifは
は次に
self.myOutletProperty =ゼロ、 "割り当て" です。何もしない
あなたは知っておいてください、そのプロパティはただ構文糖です。例えば
:
@property(nonatomic, retain) NSString *myString;
は、あなたが道よりに@propertyを宣言した場合ので、心に留めておくべきことは、実際に解放する
ことの一つでもあることである
- (NSString*)myString {
return myString;
}
- (void)setMyString:(NSString*)newString {
if (myString != newString) {
[myString release];
myString = [newString retain];
}
}
に変換されますあなたのプロパティをnilに設定しても問題ありませんが、代わりにdeallocメソッドで[object release]
を呼び出すことをお勧めします。こうすることで、別のivar(既にリリースされている可能性があります)を参照する独自のsetterメソッドを作成したり、そのプロパティにKVO通知を登録したりすると、安全です。
どのような意味でも「仮想」にする必要はありません。 -deallocが呼び出されると、オブジェクトは依然として存在します。 –