Objective-C中是否可能存在对象数组?

4

我对Objective-C还很陌生。在创建对象数组时遇到了问题。在Java中,可以创建对象数组并直接访问各个实例。

例如:

SomeClass[] instance = new SomeClass[10];
instance[i].var=10;

有没有办法在Objective-C中像这样做?我能否直接使用索引访问对象数组中的实例变量?一个例子会更有帮助。提前感谢。

SomeClass *instance[]= [[SomeClass alloc]init]; 这样写可以吗? - Ka-rocks
左侧是 (SomeClass **) 类型,而右侧是 id 类型。它们不兼容。 - user23743
5个回答

7
使用Foundation框架(如果您使用Objective-C,那么您几乎肯定会使用它):
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];

在将对象添加到数组后,我能修改数据吗?它会反映在数组中吗? - Ka-rocks
1
你只是将一个对象引用添加到数组中。在数组中对该对象所做的任何更改都将反映在您在其他地方使用该对象的地方。 - peelman

6
你可以使用NSArray(由其他答案记录),也可以使用标准的C数组。在后一种情况下,你需要这样做:
id numbers[10];
NSInteger i;
for (i = 0; i < 10; i++) {
  numbers[i] = [NSNumber numberWithInteger: i];
}

请注意,与Java不同,Swift中没有类型id[]NSString[]等。原始数组与C语言中的一样:一个指针和一个光标。

谢谢@Graham Lee,我不知道那是可能的。 - Sabobin

2
SomeClass[] instance = new SomeClass[10];
instance[i].var=10;

最接近上述内容的Objective-C代码大致如下:
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:并且期望一个整数作为其参数,上述代码就可以正常工作。


0

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接