2012-02-08 11 views
2

アレイとアレイ、メモリの問題

それはあなたがARCを使用している場合は、「ドン

arr = [[NSMutableArray alloc] initWithObjects: 
       [[NSMutableArray alloc] init], 
       [[NSMutableArray alloc] init],  
       [[NSMutableArray alloc] init], 
       [[NSMutableArray alloc] init],  
       [[NSMutableArray alloc] init], 
       [[NSMutableArray alloc] init],  
       [[NSMutableArray alloc] init], nil]; 
+1

「autorelease」? – beryllium

+0

'+(id)arrayWithCapacity:(NSUInteger)numItems'? –

+1

あなたのalloc/initのアプローチではなく '[NSMutableArray array]'を使います。 –

答えて

3

使用[NSMutableArray array]、 。 本当に必要なのは配列の配列なので、RJGridというクラスがあり、これは複数のNSMutableArraysより高速です(リンクされたリストはルックアップに時間がかかります)。

クラスhereは、私のDropboxにダウンロードできます。それはARCを使用していますが、私がそれをしたい場合は、参照カウント環境に変換するのに十分シンプルです。

1

内の配列の配列でなければなりません何もする必要はありません。あなたはARCを使用していない場合は、配列を自動解放することができます

arr = [[NSMutableArray alloc] initWithObjects: 
       [[[NSMutableArray alloc] init] autorelease], 
       [[[NSMutableArray alloc] init] autorelease],  
       [[[NSMutableArray alloc] init] autorelease], 
       [[[NSMutableArray alloc] init] autorelease],  
       [[[NSMutableArray alloc] init] autorelease], 
       [[[NSMutableArray alloc] init] autorelease],  
       [[[NSMutableArray alloc] init] autorelease], nil]; 
+3

'[NSMutableArray array]'はキーストロークの半分で、読みやすく理解しやすいです。 –

+0

NSAutorelasePoolを使用して簡単にする方法はありますか? (いいえ...私は約10日間の経験を持つObjective-C newbです)。 –

+0

@JasonDownいいえ、ARCを有効にする必要があります。しかし、私は正直なところ、最初に手動で参照カウントを学ぶことをお勧めします。 –

1

は自動解放メモリプールを使用して、あなたがあなたのARR変数で行われたときにプールを解放します。あなたは、あなたがその上に保持したい場合はarrを解放/保持しなければならない

arr = [NSMutableArray arrayWithObjects: 
      [NSMutableArray array], 
      [NSMutableArray array],  
      [NSMutableArray array], 
      [NSMutableArray array],  
      [NSMutableArray array], 
      [NSMutableArray array],  
      [NSMutableArray array], nil]; 

注:あなたが心配する必要はありません自動解放オブジェクトを作成し、代わりに

http://www.alphero.com/mobile-development/understanding-objective-c-autorelease-memory-management/