我对Objective-C很新。创建对象数组时遇到问题。在java中,可以创建对象数组,并可以直接访问各个实例。
例如,
SomeClass[] instance = new SomeClass[10];
instance[i].var=10;
在Objective-C中有没有办法做到这一点?我可以使用索引直接访问对象数组中的实例变量吗?一个例子是更多的帮助。提前致谢
答案 0 :(得分:7)
使用Foundation Framework(如果您使用的是Objective-C,几乎肯定会这样):
NSString *object1 = @"an object";
NSString *object2 = @"another object";
NSArray *myArray = [NSArray arrayWithObjects:object1, object2, nil];
NSString *str = [myArray objectAtIndex:1];
此处,str
将是对象2(包含another object
)的引用。请注意,nil
'终止'数组中的对象列表,并且是必需的。如果你想要一个可变(可修改)的数组:
NSString *object1 = @"an object";
NSString *object2 = @"another object";
NSMutableArray *myMutableArray = [NSMutableArray array];
[myMutableArray addObject:object1];
[myMutableArray addObject:object2];
答案 1 :(得分:6)
您可以同时使用NSArray
(由其他答案记录)和标准C数组。在后一种情况下,你会这样做:
id numbers[10];
NSInteger i;
for (i = 0; i < 10; i++) {
numbers[i] = [NSNumber numberWithInteger: i];
}
请注意,与Java不同,没有类型id[]
或NSString[]
或任何类型。原始数组与C中的相同:指针和光标。
答案 2 :(得分: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:
并将一个整数作为其参数,上面的代码就可以了。
答案 3 :(得分:0)
答案 4 :(得分: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
。