有没有办法指定NSMutableArray的对象类?

时间:2011-12-31 10:28:14

标签: objective-c ios arrays nsmutablearray

我遇到以下问题:

我已经创建了一个NSMutableArray“数组”,它将包含一个名为“Class”的类的对象。在开始时,该数组应为空,并且必须在程序执行期间填充该数组。

由于我从未真正告诉编译器我的NSMutableArray将保存类Class的元素,当我尝试编写适当的方法时,编译器不会让我这样做。

这是我在Objective-C和iPhone开发方面的第一次体验。我以前用C / C ++编写代码,用以下方式声明我的数组:

Class array[NUMBEROFELEMENTS];

在Objective-C中有没有办法做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:1)

事实是,对NSMutableArray来说无关紧要是什么类型的对象。 NSMutableArray只存储指向它们包含的所有对象或引用的指针。

技巧是当你将对象拉出数组时,需要根据相应的类型创建一个新的指针:

MyObject *myObject = [myArray objectAtIndex:0];

然后你可以随意使用这个对象:

[myObject doThatThingWithThisValue:10];

或者你需要什么。

答案 1 :(得分:0)

Objective-C Cocoa中的数组是对象(以及其他集合,集合,字典)。数组可以包含对任何类型对象的引用,因此数组的类型只是 <{em> NSArrayNSMutableArray等...

由于它们是对象,因此您可以向它们发送消息来操纵其内容。

我建议你看一下Apple的优秀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

答案 2 :(得分:0)

嗯,你仍然可以在Objective-C中使用C风格的数组。

然而,Objective-C的特征(有些人称之为强度,其他人称之为弱点)是它具有对象的动态类型和动态调度。

它有NSArrayNSMutableArray,它们并不专门针对某个类。它可以存储不兼容类的对象。

您可以使用以下习语:[obj isMemberOfClass: [Class type]]来确保数组元素属于所需类型,然后转换为Class*

你也可以使用for-each循环(又名Fast Enumeration):

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