2012-02-08 65 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 2012-02-08 16:32:15

+0

'+(id)arrayWithCapacity:(NSUInteger)numItems'? – 2012-02-08 16:33:43

+1

使用'[NSMutableArray array]'而不是你的alloc/init方法。 – 2012-02-08 16:33:55

回答

3

使用[NSMutableArray array]代替,這將創建一個自動釋放的對象,您不必擔心:

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

請注意,您必須保留/釋放arr如果你想抓住它。 如果你真正想要的僅僅是數組的數組,我有一個叫做RJGrid的類,它會爲你做這件事,並且比多個NSMutableArrays(查找的鏈表慢)。

您可以在我的下拉框中下載課程here。它使用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]'是大約一半的擊鍵次數,並且更易於閱讀/理解。 – 2012-02-08 16:35:17

+0

有沒有辦法使用NSAutorelasePool來簡化它? (不知道...我是一個具有10天左右的經驗的Objective-C新手)。 – 2012-02-08 16:35:43

+0

@JasonDown不,你需要啓用ARC。不過,我誠實地建議你先學習手動引用計數。 – 2012-02-08 16:36:41