-1

「assign」属性を使用してプロパティを作成し、deallocメソッドでプロパティをnilに設定するとどうなりますか

@property (nonatomic, assign) NSString* myData;

- (void)dealloc {
    self.myData = nil;
}
4

2 に答える 2

3

次に、ポインタをに設定するだけのセッターが呼び出され、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
}

ゲッターの間で違いはありません。どちらも非原子的です。

于 2011-10-13T19:25:03.547 に答える
0

それをすることに何も悪いことはありません。

通常、これを行うメリットはありません。その後、myDataの値に依存するdeallocのコードが実行されない限り、効果はありません。

保持として宣言および定義されたプロパティをnilに設定すると、リリースが前のプロパティ値に送信されます。しかし、それが割り当てとして定義されている場合、それは起こりません。基本的にはインスタンス変数を設定するだけですが、インスタンス変数の値を読み取るものは他にないため、通常はdeallocでは問題になりません。

于 2011-10-13T21:27:01.090 に答える