2011-12-31 74 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; 
} 
相关问题