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