我遇到以下问题:
我已经创建了一个NSMutableArray“数组”,它将包含一个名为“Class”的类的对象。在开始时,该数组应为空,并且必须在程序执行期间填充该数组。
由于我从未真正告诉编译器我的NSMutableArray将保存类Class的元素,当我尝试编写适当的方法时,编译器不会让我这样做。
这是我在Objective-C和iPhone开发方面的第一次体验。我以前用C / C ++编写代码,用以下方式声明我的数组:
Class array[NUMBEROFELEMENTS];
在Objective-C中有没有办法做到这一点?
谢谢!
答案 0 :(得分:1)
事实是,对NSMutableArray来说无关紧要是什么类型的对象。 NSMutableArray只存储指向它们包含的所有对象或引用的指针。
技巧是当你将对象拉出数组时,需要根据相应的类型创建一个新的指针:
MyObject *myObject = [myArray objectAtIndex:0];
然后你可以随意使用这个对象:
[myObject doThatThingWithThisValue:10];
或者你需要什么。
答案 1 :(得分:0)
Objective-C Cocoa中的数组是对象(以及其他集合,集合,字典)。数组可以包含对任何类型对象的引用,因此数组的类型只是 <{em> NSArray
,NSMutableArray
等...
由于它们是对象,因此您可以向它们发送消息来操纵其内容。
我建议你看一下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的特征(有些人称之为强度,其他人称之为弱点)是它具有对象的动态类型和动态调度。
它有NSArray
和NSMutableArray
,它们并不专门针对某个类。它可以存储不兼容类的对象。
您可以使用以下习语:[obj isMemberOfClass: [Class type]]
来确保数组元素属于所需类型,然后转换为Class*
。
你也可以使用for-each循环(又名Fast Enumeration):
NSMutableArray* array = //... initialize your array
for (Class* elm in array) {
elm.your_property = 10;
}