我对Objective-C还很陌生。在创建对象数组时遇到了问题。在Java中,可以创建对象数组并直接访问各个实例。
例如:
SomeClass[] instance = new SomeClass[10];
instance[i].var=10;
有没有办法在Objective-C中像这样做?我能否直接使用索引访问对象数组中的实例变量?一个例子会更有帮助。提前感谢。
我对Objective-C还很陌生。在创建对象数组时遇到了问题。在Java中,可以创建对象数组并直接访问各个实例。
例如:
SomeClass[] instance = new SomeClass[10];
instance[i].var=10;
NSString *object1 = @"an object";
NSString *object2 = @"another object";
NSArray *myArray = [NSArray arrayWithObjects:object1, object2, nil];
NSString *str = [myArray objectAtIndex:1];
str
将是指向对象2(其中包含另一个对象
)的引用。请注意,nil
“终止”了数组中的对象列表,并且是必需的。如果您想要一个可变(可修改)的数组:NSString *object1 = @"an object";
NSString *object2 = @"another object";
NSMutableArray *myMutableArray = [NSMutableArray array];
[myMutableArray addObject:object1];
[myMutableArray addObject:object2];
NSArray
(由其他答案记录),也可以使用标准的C数组。在后一种情况下,你需要这样做:id numbers[10];
NSInteger i;
for (i = 0; i < 10; i++) {
numbers[i] = [NSNumber numberWithInteger: i];
}
id[]
或NSString[]
等。原始数组与C语言中的一样:一个指针和一个光标。SomeClass[] instance = new SomeClass[10];
instance[i].var=10;
NSMutableArray* instances = [[NSMutableArray alloc] init];
[instances addObject: foo];
[instances addObject: bar];
// etc. mutable arrays grow as you add elements to them
[[instances objectAtIndex: i] setVar: 10];
你添加到数组中的对象类型是什么并不重要,只要它们能响应你选择发送的消息即可。因此,只要实例数组中索引i处的对象能够响应选择器-setVar:
并且期望一个整数作为其参数,上述代码就可以正常工作。
Objective-C类的引用只是指针,因此您可以创建一个指针的C数组:
NSNumber* numbers[10];
for (int i=0; i<10; i++)
{
numbers[i] = [NSNumber numberWithInt:i];
}
NSLog(@"%@ %@ %@ %@ %@ %@ %@ %@ %@ %@", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], numbers[6], numbers[7], numbers[8], numbers[9]);
//0 1 2 3 4 5 6 7 8 9
然而,最好使用NSArray
。
(SomeClass **)
类型,而右侧是id
类型。它们不兼容。 - user23743