2009-04-24 16 views
1

deallocメソッドでnilにプロパティを設定すると、どうなりますか?

-(void)dealloc { 
    self.myOutletProperty = nil; 
    [super dealloc]; 
} 

私は、ソートの仮想セッターが呼び出されることを推測します。しかし、ここではどんなことが起こりますか?どうして?

+0

どのような意味でも「仮想」にする必要はありません。 -deallocが呼び出されると、オブジェクトは依然として存在します。 –

答えて

1

Nilはnullと同じですが、オブジェクトに対してです。それはオブジェクトを意味しません。

ドットシンタックスは、[self setMyOutletProperty:nil]を呼び出すのと同じです。

したがって、一部のプロパティからオブジェクトを削除するだけです。意味はあなたが話している財産によって決まります。プロパティタイプ1.If

7

は "コピー" 又は "保持"、次いで

self.myOutletProperty =ゼロです。 [myOutletProperty release]と同じです。プロパティタイプ2.Ifは

は次に

self.myOutletProperty =ゼロ、 "割り当て" です。何もしない

12

あなたは知っておいてください、そのプロパティはただ構文糖です。例えば

@property(nonatomic, retain) NSString *myString; 

は、あなたが道よりに@propertyを宣言した場合ので、心に留めておくべきことは、実際に解放する

2

ことの一つでもあることである

- (NSString*)myString { 
    return myString; 
} 

- (void)setMyString:(NSString*)newString { 
    if (myString != newString) { 
     [myString release]; 
     myString = [newString retain]; 
    } 
} 

に変換されますあなたのプロパティをnilに設定しても問題ありませんが、代わりにdeallocメソッドで[object release]を呼び出すことをお勧めします。こうすることで、別のivar(既にリリースされている可能性があります)を参照する独自のsetterメソッドを作成したり、そのプロパティにKVO通知を登録したりすると、安全です。

関連する問題