2011-12-31 61 views
0

Im有以下問題:有什麼辦法來指定NSMutableArray的對象的類?

我做了一個NSMutableArray「數組」,它將包含名爲「Class」的類的對象。在開始時,數組應該是空的,並且在程序執行期間必須填充它。

因爲我從來沒有真正告訴編譯器,我的NSMutableArray將保存類類的元素,當我嘗試編寫適當的方法時編譯器不會讓我這樣做。

這是我第一次體驗Objective-C和iPhone開發。我用C/C編寫++,我宣佈我以下列方式排列:

Class array[NUMBEROFELEMENTS]; 

有什麼辦法在Objective-C這樣做呢?

謝謝!

+1

即使它僅用於說明,由於「Class」是現有的objc typedef,因此您可能希望選擇「Class」以外的名稱。 – justin 2012-01-01 00:26:34

回答

1

的真相是,是沒有關係的NSMutableArray的是什麼類型的對象。 NSMutableArray只存儲指向它們包含的所有對象或引用的指針。

訣竅是,當你拉的對象回來了數組,你需要根據相應的類型來創建一個新的指針:

MyObject *myObject = [myArray objectAtIndex:0]; 

然後你就可以使用對象,只要你喜歡:

[myObject doThatThingWithThisValue:10]; 

或任何你需要的。

0

Objective-C中的數組Cocoa是對象(以及其他集合,集合,字典)。數組可以包含任何類型的對象的引用,因此對於數組類型是簡單NSArrayNSMutableArray等..

由於它們是對象,你可以向他們發送消息來操作他們的內容。

我建議你看看蘋果公司出色的Collections Programming Topics,它解釋了收藏的雛形。

下面是一個簡單的例子:

// two objects of different types 
NSNumber *n = [NSNumber numberWithInteger:10]; 
NSString *s = @"foo"; 

// alloc/init a new mutable array 
NSMutableArray *a = [NSMutableArray arrayWithCapacity:10]; 
// add an object 
[a addObject:n]; 
[a addObject:s]; 
// array a now contains a NSNumber and a NSString 
0

那麼,你仍然可以在Objective-C C風格的數組。但是,Objective-C的特性(有些人稱之爲強度,其他稱之爲弱點)是它具有動態類型的對象和動態調度。

它有NSArrayNSMutableArray這是不是專門爲某一類。它可以存儲不兼容類的對象。

您可以用下面的習慣:[obj isMemberOfClass: [Class type]]確保數組元素是需要的類型,然後轉換爲Class*

您還可以使用for-each循環(又名快速計數):

NSMutableArray* array = //... initialize your array 
for (Class* elm in array) { 
    elm.your_property = 10; 
} 
相關問題