2011-05-17 231 views
1

我有一個「Note」類,並且我有一個Tuner類。我的Tuner類正在初始化一個NSArray*它的init函數。iOS對象數組:在一個函數內部創建一個對象數組

我想初始化這個數組來保存88個音符,現在我正在創建諸如Note * key1;等等

我只是確保我需要爲這些筆記分配一些東西,以便在初始化完成後它們不會超出範圍,並且我的NSArray會保留其條目的完整性,或者我能夠聲明Note key1並將其插入到數組中,併爲我照顧。 創建NSArray包含少數幾個對象的示例代碼片段,即使在函數退出後該數組仍然存在將非常有幫助。謝謝!

回答

2

NSArrayNSMutableArray發送-retain對象加入時,他們,所以適當的事情做的是-release你添加的對象明確,或使用自動釋放的對象。

這裏是爲Tuner類的-init方法,一個簡單的例子:

- (id)init 
{ 
    NSInteger i; 
    Note   *note; 

    self = [ super init ]; 
    if (self) { 
     notes = [[ NSMutableArray alloc ] initWithCapacity: 88 ]; 
     for (i = 0; i < 88; i++) { 
      note = [[ Note alloc ] initWithKey: i ]; 
      [ notes addObject: note ]; 
      [ note release ]; 
     } 
    } 

    return(self); 
} 

您需要+alloc每一個音符對象和-release它,因爲它保留其添加到陣列。爲了消滅當你完成所有提示對象,請確保您的Tuner類釋放陣列中的-dealloc方法:

- (void)dealloc 
{ 
    [ notes release ]; // this sends release to all objects in the array, too 

    [ super dealloc ]; 
} 
+0

謝謝,與NSMutableArray或只是標準的NSArrays我需要在數組的末尾添加零?我在某處讀過這些內容,但不確定何時該做這件事。 – hrtachetosing 2011-05-17 15:25:28

+0

'nil'被稱爲哨點值。它告訴接收者變量長度變量列表的末尾在哪裏。你只需要使用特定的'NSArray'(及其子類)和'NSDictionary'方法,如'-initWithObjects:',例如:'array = [[NSArray alloc] initWithObjects:a,b,c,nil];' 。由於'-initWithObjects:'接受任意數量的參數,因此需要通過某種方式告知接收方哪個參數是最後一個參數。 'nil'就是爲了這個目的。 – 2011-05-17 15:42:51

+0

只是爲了澄清:'-addObject:'不需要定位零值,因爲您只需添加一個對象。 – 2011-05-17 15:45:32

0

嗯,我不完全確定你在做什麼,但是你可以把一個NSMutableArray作爲一個全局變量。然後你可以添加和刪除任何類型的任何對象到這個數組中。該數組仍然會在內存中,直到您將其稱爲釋放方法。

2

這裏有一個如何做,在你的Tuner

for (int i = 0; i < 88; ++i) 
{ 
    Note *key = [[Note alloc] init]; 
    [myNotes addObject:key]; 
    [key release]; 
} 

的初始化函數一個簡單的例子,請注意,在我的例子,myNotes被假定爲類型NSMutableArray的這是唯一的出路你可以通過像這樣分別添加對象來構建一個數組。

+1

你可以在本例中使用'initWithCapacity:'實例化你的myNotes NSMutableArray,因爲你知道它是最終的容量。這會阻止陣列在添加對象時調整大小,這會給你一個(可能忽略不計)的性能提升。 – 2011-08-30 00:55:50

1

將舉行音符數組類裏面。

  1. 使用稱爲筆記的NSMutableArray類型(非原子,保留)創建屬性。
  2. 合成它。
  3. 確保它在dealloc方法中發佈。

內用於創建陣列的方法,包括:

  1. init和的alloc一個新的臨時的NSMutableArray。
  2. 循環並將所有Note對象添加到數組中。
  3. 將此數組添加到筆記。