2011-01-11 1 views
1

initWithNibNameメソッドでプロパティとして設定されている配列のメモリを割り当てることは正しいですか?ビューがポップされてからプッシュされても、メモリをそれ以上割り当てる必要がない場合再び)?ビューが示され、その後に隠されている場合Iphone initWithNibNameにメモリを割り当てます。

おかげ

答えて

2

まあ、それはinitWithNibName、その後releaseの両方を受信します。だから何あなたがやるべきことは、このようなものである:どんなに短いView Controllerのライフ

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    yourArray = [[NSArray alloc] init]; 
} 

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

、それにもかかわらず順番に最終的にdeallocが呼ばれているになりますこれは、却下された時にリリースを受け取ることになります。

2

は、あなたのdeallocで必ずリリースしてください。

:あなたは、このような何かを唯一のプロパティメソッドを通過する場合

_myArray = [[NSArray alloc]init]; 

:あなたは、あなたのセッターを使用しないでくださいINITINGのalloc時に代わりにあなたが直接インスタンス変数にinitのallocすべきであることを確認してください

self.myArray = [NSArray array]; 

て、もう一度、あなたのdeallocでそれを解放することを忘れてはいけない:

-(void)dealloc 
{ 
    [_myArray release]; 
    [super dealloc]; 
} 
+0

なぜ私は私のセッターを使用should't?ありがとう – xger86x

+0

あなたが "持っている"(おそらく持っている)または "コピー"プロパティを持っているなら、あなたが初期化を割り当てるときにあなたのセッターを使うならば、このオブジェクトは2度保持されるでしょう。 2.あなたのセッターで。それはあなたが一度だけ "リリース"を呼んでいるのであなたの記憶が漏れる原因になります。 (そして、あなたはリリースを一度だけ呼び出すべきです)。setterを使いたい場合は、オートレリースされたオブジェクトを取得してください。 –