2012-01-25 11 views
0

私はこのような性質を持っている:保持されているプロパティが解放されたときは?

@property(nonatomic,retain) NSString *porpertyList; 

@synthesize porpertyList = _porpertyList; 

- (void)dealloc 
{ 
[_porpertyList release]; 
} 

、私はこれを行う場合_porpertyList = @ "";私のアプリで。プロパティがリリースされますか?

//編集済み ここで@synthesize porpertyList = _porpertyListを使用する必要があるのは分かりません。 ?

+0

_sortingDateとは何ですか? – Shubhank

+0

申し訳ありませんが私の間違いは今交換されました – Streetboy

答えて

0

@propertyオプションを変数名に使用する場合は、 self.propertyList = @""ではなく_propertyList = @""を使用して割り当てる必要があります。 self.propertyListを使用すると、割り当て時に使用していた以前のメモリが解放されます

+0

ありがとうございました。しかし、今私はこの@synthesize porpertyList = _porpertyListを使うべきであると理解していません。 ? – Streetboy

+0

にはhttp://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/26587-slicks-definitive-guide-properties.htmlがあります。そのクリアがあなたのためにあるかどうかを確認してください – glogic

+0

間違っていて、self.propertyを設定してください= nil、それほど有用ではありません(@ ""はnilではありません...) –

0

_porpertyList = @""は何もリリースしません。リリースしたい場合は、self. porpertyList = nilを使用できます。これで適切に解放されます。

2

使用しているメモリモデルによって異なります。 ARCを使用している場合、保持されているプロパティを解放するためにdeallocを書く必要はありません。これはあなたのために行われます。ここで注意すべき

- (void) dealloc { 
    [_propertyList release]; 
    [super dealloc]; 
} 

2つのこと:あなたがARCを使用していない場合、あなたが保持プロパティの変数リリースしたい

  1. あなたがここに変数を解放したいが、にプロパティを設定していませんなし。これにより、セッター(カスタム動作、kvo通知)を使用するときに起こり得る副作用が回避されます。
  2. は、あなたがこの

    [email protected]""; 
    

    のようにプロパティにアクセスする場合は、(@synthesizeする自動作成されたおかげである)setterメソッドを使用して、実際にある[super dealloc];

+0

+1(インスタンス変数の設定をnilに設定する代わりに、kvo通知をトリガーする可能性があります)。 – Marco

2

を呼び出すことを忘れないでください。したがって、この場合、古いオブジェクトが解放され、新しいオブジェクトが割り当てられ、保持されます。あなたは、あなただけのプロパティに新しい値を割り当てる

[email protected]""; 

を呼び出す場合、その後

@synthesize property= _property; 

を使用してあなたの財産を合成した場合

。何もリリースされていません。あなたには、いくつかの選択肢があり、あなたのdealloc方法でそう

、:あなたが財産を合成するたびに

-(void)dealloc 
{ 
    [email protected]"";//old value released, new value is @"" 
    self.property=nil;//old value released, new value is nil 
    [_property release]; //old value released 
    [super dealloc]; 
} 
+3

アドバイスは、部分的に割り当て解除されたオブジェクトのメソッドを実際に呼び出しているため、deallocにセッター(暗黙的にドット表記法を含む)を使用しない傾向があります。あなたが慎重に考えていても、誰かがあなたのオブジェクトをサブクラス化し、より複雑なセッターを実装している場合、特にサブクラスが完全に終了した後でdeallocが発生することを考えれば、 – Tommy

1
@synthesize porpertyList = _porpertyList; 

を...あなたは最高のあなたがあなたの中のリリースを持っている理由だと1..so、カウントを保持dealloc。

Using self.propertyList = something 

porpertyList = something 

非常に異なるものですとプロパティを使用している場合、後者の一つは避けるべきです。.. そのため、porpertyList = _porpertyListです。はpopertyListがポインタであるはあなたがself.porperty = somethingを行う際..youが別々にする

.. ..

あなたは理由があるのpropertylist代わりのself.porpertyList

を使用しないことであるthere..so (@ ""の場合ではない) あなたがpopertyList = somethingをした場合、あなたはそれが最初に持っていた全体のカウントを混乱させて、別のオブジェクトを指し示すようにして、あなたのプログラムを妙に振る舞わせることができます。 。

関連する問題