Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 这些创建和处理阵列的方法之间的基本区别是什么?_Iphone_Ios_Arrays_Nsarray - Fatal编程技术网

Iphone 这些创建和处理阵列的方法之间的基本区别是什么?

Iphone 这些创建和处理阵列的方法之间的基本区别是什么?,iphone,ios,arrays,nsarray,Iphone,Ios,Arrays,Nsarray,我不确定使用固定大小的10个MyClass类型的对象来声明数组的方法,以及这些不同的替代方法对效率、编码的方便性或其他方面的影响 …记住新的xCode4.4功能,特别是: 对于NSArray和NSDictionary类,提供了以下支持: 目的-C文本 Objective-C支持使用“[]”语法进行订阅 容器对象 …当然还有使用圆弧 特别是我需要编写构造函数方法,作为结果返回这些数组 备选方案1 MyClass* objectOfMyClass; MyClass* array1[10]

我不确定使用固定大小的10个MyClass类型的对象来声明数组的方法,以及这些不同的替代方法对效率、编码的方便性或其他方面的影响

…记住新的xCode4.4功能,特别是:

  • 对于NSArray和NSDictionary类,提供了以下支持: 目的-C文本
  • Objective-C支持使用“[]”语法进行订阅 容器对象
…当然还有使用圆弧

特别是我需要编写构造函数方法,作为结果返回这些数组

备选方案1

  MyClass* objectOfMyClass;
  MyClass* array1[10];
  array1[5] = objectOfMyClass;
方法声明:

- (MyClass*[]) createArray {   <--- is this declaration correct like this ?
- (NSArray*) createArray {
- (NSArray*) createArray {
顺便说一句,这些数组放在主内存中,而不是堆栈中,但我不确定

备选方案3

NSArray *array4 = [[NSArray alloc] init];
array4 = ...how to prepare the array so it can hold 10 objects without using NSMutableArray ?
            otherwise I do not see a difference to alternative 2...
for (int i = 0; i<10; i++)
    array4[i] = objectOfMyClass];

非常感谢你给我们带来光明

有一篇关于文字的好文章。你不能做选择1。最好的方法是:

NSMutableArray *holdsMyClass = [NSMutableArray arrayWithCapacity:10]; // sized so array does not need to realloc as you add stuff to it
不能通过索引超过数组的大小来任意增加数组的大小-如果索引5处有对象,可以替换它:

holdsMyClass[5] = obj;
例如,如果您尝试编译此文件,它将失败:

- (NSArray*[]) createArray
{
    NSArray *foo[10];
    foo[2] = [NSArray array];

    return foo;
}

生成此错误:“数组初始值设定项必须是初始值设定项列表”

非常感谢您提供本文链接-这确实有助于解释Apple只提到的内容,而不是解释它-甚至在关于新Xcode4.4功能的详细文档中。然而,我不明白你为什么说“Can do Alternative 1”,我的意思是,如果你混合使用“C”数组和它管理的对象,ARC经常会抱怨——它无法跟踪这些对象,因此无法确保正确地保留和释放对象。我相信llvm站点上的ARC文档中包含了此主题:
- (NSArray*[]) createArray
{
    NSArray *foo[10];
    foo[2] = [NSArray array];

    return foo;
}