2011-07-02 14 views
1

の解放についての問い合わせは、私はメモリ管理に関する一般的なクエリを持って客観C:インスタンスプロパティ

//In .h file I defined a property 
@interface AClass 
{ 
    someClass *aProperty; 
} 

@property (nonatomic, retain) someClass *aProperty; 

end 



//In .m file I synthesized the property and also initialized the property 
@implementation AClass 

-(void)aMethod 
{ 
    self.aProperty = [[someClass alloc]init]; 
} 

私の質問は、私は「リリース」のメモリを防ぐために行うのですか「aProperty」のために

ですリーク?私は通常、インスタンスのプロパティ(ドット記法を使用)について理解しています。私たちは 'dealloc'と 'viewdidunload'メソッドでリリースします。しかし、このインスタンスでは、aMethodメソッド内でaPropertyを再度リリースする必要がありますか?

答えて

4
  1. あなたはのdealloc
  2. あなたのプロパティの初期化でインスタンスを解放しなければならないが、メモリリークが発生します。あなたはalloc + initを行い、プロパティの中に保持しますが、解放しません。通常のようなものが使用されます。
2

あなたはAClass自動的retainそのプロパティaPropertyretain

@property (nonatomic, retain) someClass *aProperty; 

内の任意のインスタンスを持っているので。そのため、 deallocメソッドの [aProperty release]AClassと電話する必要があります。

aMethodを呼び出すたびに、前のインスタンスを解放せずにsomeClassの新しいインスタンスを作成しています。これにより、大きな漏れが発生します。これは2つの方法のいずれかで修正できます。以前のaPropertyの値を解放するか、autoreleaseへのコールを追加してください。