「assign」属性を使用してプロパティを作成し、deallocメソッドでプロパティをnilに設定するとどうなりますか
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
「assign」属性を使用してプロパティを作成し、deallocメソッドでプロパティをnilに設定するとどうなりますか
@property (nonatomic, assign) NSString* myData;
- (void)dealloc {
self.myData = nil;
}
次に、ポインタをに設定するだけのセッターが呼び出され、nil
他には何も起こりません。
編集:(非アトミック、割り当て)と(非アトミック、保持)の違い
assign
-propertyはポインタを設定するだけで、-propertyretain
は古いオブジェクトでreleaseを呼び出し、新しいオブジェクトを保持します。
合成された(nonatomic, assign)
セッターは次のようになります。
-(void) setMyData:(NSString*)value
{
myData = value; //just assigning the pointer
}
そして、合成された(nonatomic, retain)
セッターは次のようになります。
-(void) setMyData:(NSString*)value
{
[value retain]; // retain new object
[myData release]; // release old object. if myData is nil: nothing happens
myData = value; // assigning the pointer
}
ゲッターの間で違いはありません。どちらも非原子的です。
それをすることに何も悪いことはありません。
通常、これを行うメリットはありません。その後、myDataの値に依存するdeallocのコードが実行されない限り、効果はありません。
保持として宣言および定義されたプロパティをnilに設定すると、リリースが前のプロパティ値に送信されます。しかし、それが割り当てとして定義されている場合、それは起こりません。基本的にはインスタンス変数を設定するだけですが、インスタンス変数の値を読み取るものは他にないため、通常はdeallocでは問題になりません。