2012-06-07 49 views
1

我正在写一个iOS程序的目标c,我需要一个具有以下特征的数组:如何创建一个动态数组,使其大小保持在目标c?

1)它的形状需要在运行时决定。

2)需要能够当我在它需要保持该索引在特定索引插入的对象将被存储为一个Objective-C类

3)内的属性或全局的。例如,如果我在插入索引5,对象需要覆盖任何的索引为5和做没有这些元素的偏移或者任何其它元件(到一个Java阵列的工作原理类似)

我已经看着NSMutableArray,但这似乎不符合我上面描述的,因为它插入时移动元素。我也试过NSString *myArray = malloc(10 * sizeof(NSString *));,但是这给了我一个关于需要桥接转换的错误。我不知道那是什么。

我使用ARC,在重要的情况下。

回答

8

1)nameOfMyArray = [[NSMutableArray alloc] initWithObjects:@"obj1", @"obj2", "obj3",nil];

3)而不是做插入操作,为什么不只是做一个替换操作?

[nameOfMyArray replaceObjectAtIndex:0 withObject: @"newObject here"]; 
+0

他也可以,如果他知道的大小,但没有内容开始充满NSNulls的阵列。 – UIAdam

+0

注意:如果数组不够大,您必须首先检查数组边界并添加一堆nil。 – mkb

+0

更新你的代码来说initWithObjects:@“obj1”,@“obj2”,@“obj3”,nil];您最后缺少一个零,并使用正确的代码进行初始化。 – Christian

3

听起来像你想要典型的NSMutableArray行为。

NSMutableArray *arr = [[NSMutableArray alloc] init]; 
// add a few objects, let's assume there are 10 objects 
[arr replaceObjectAtIndex:5 withObject:myObject]; 

使用替换方法,什么都不会移动。你的代码看起来更像C,而不是Objective-C。我建议读一本书或一些文档来理解应该如何使用Objective-C对象 - 你永远不会malloc一个Objective-C对象,而应该使用alloc类方法。

相关问题