Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Alloc和init NSArrays位于Objective-C中解析函数的内部还是外部?_Objective C_Arrays_Parsing_Memory Management_Nsarray - Fatal编程技术网

Alloc和init NSArrays位于Objective-C中解析函数的内部还是外部?

Alloc和init NSArrays位于Objective-C中解析函数的内部还是外部?,objective-c,arrays,parsing,memory-management,nsarray,Objective C,Arrays,Parsing,Memory Management,Nsarray,我试图了解在Objective-C ARC应用程序中,在何处更好地分配阵列: 案例1:解析函数外部的alloc和init数组 - (void)viewDidLoad { // or another method // other code // here I alloc and init arrays: dataSource2 = [[NSMutableArray alloc] init]; dataSource3 = [[NSMutableArray al

我试图了解在Objective-C ARC应用程序中,在何处更好地分配阵列:

案例1:解析函数外部的alloc和init数组

- (void)viewDidLoad { // or another method

    // other code
    // here I alloc and init arrays:

    dataSource2 = [[NSMutableArray alloc] init]; 
    dataSource3 = [[NSMutableArray alloc] init]; 
    dataSource4 = [[NSMutableArray alloc] init]; 
    dataSource5 = [[NSMutableArray alloc] init]; 
    dataSource6 = [[NSMutableArray alloc] init]; 
    dataSource7 = [[NSMutableArray alloc] init]; 
    dataSource8 = [[NSMutableArray alloc] init]; 
    dataSource9 = [[NSMutableArray alloc] init]; 
}

- (void)parseFunction {

    // parsing code
    // do something with arrays and iterate, example: 

       for (int i = 1; i < [arrays count]; ++i) {
            [dataSource2 addObject:object2];
            [dataSource3 addObject:object3];
            [dataSource4 addObject:object4];
            [dataSource5 addObject:object5];
            [dataSource6 addObject:object6];
            [dataSource7 addObject:object7];
            [dataSource8 addObject:object8];
            [dataSource9 addObject:object9];
        }
}
-(void)viewDidLoad{//或其他方法
//其他代码
//这里我介绍了alloc和init数组:
数据源2=[[NSMutableArray alloc]init];
数据源3=[[NSMutableArray alloc]init];
数据源4=[[NSMutableArray alloc]init];
数据源5=[[NSMutableArray alloc]init];
dataSource6=[[NSMutableArray alloc]init];
数据源7=[[NSMutableArray alloc]init];
数据源8=[[NSMutableArray alloc]init];
数据源9=[[NSMutableArray alloc]init];
}
-(void)parseFunction{
//解析代码
//对数组执行一些操作并进行迭代,例如:
对于(int i=1;i<[数组计数];++i){
[dataSource2 addObject:object2];
[dataSource3 addObject:object3];
[dataSource4 addObject:object4];
[dataSource5 addObject:object5];
[dataSource6 addObject:object6];
[dataSource7 addObject:object7];
[dataSource8 addObject:object8];
[dataSource9 addObject:object9];
}
}
案例2:解析函数内部和迭代周期外部的alloc和init数组

- (void)viewDidLoad { // or another method

    // other code
}

- (void)parseFunction {

    // here I alloc and init arrays: 

    dataSource2 = [[NSMutableArray alloc] init]; 
    dataSource3 = [[NSMutableArray alloc] init]; 
    dataSource4 = [[NSMutableArray alloc] init]; 
    dataSource5 = [[NSMutableArray alloc] init]; 
    dataSource6 = [[NSMutableArray alloc] init]; 
    dataSource7 = [[NSMutableArray alloc] init]; 
    dataSource8 = [[NSMutableArray alloc] init]; 
    dataSource9 = [[NSMutableArray alloc] init]; 

    // parsing code
    // do something with arrays and iterate, example:

       for (int i = 1; i < [arrays count]; ++i) {

            [dataSource2 addObject:object2];
            [dataSource3 addObject:object3];
            [dataSource4 addObject:object4];
            [dataSource5 addObject:object5];
            [dataSource6 addObject:object6];
            [dataSource7 addObject:object7];
            [dataSource8 addObject:object8];
            [dataSource9 addObject:object9];
        }
}
- (void)viewDidLoad { // or another method

    // other code
}

- (void)parseFunction {

    // parsing code, alloc init and iterate, all in the same cycle:

       for (int i = 1; i < [arrays count]; ++i) {

       dataSource2 = [[NSMutableArray alloc] init]; 
       dataSource3 = [[NSMutableArray alloc] init]; 
       dataSource4 = [[NSMutableArray alloc] init]; 
       dataSource5 = [[NSMutableArray alloc] init]; 
       dataSource6 = [[NSMutableArray alloc] init]; 
       dataSource7 = [[NSMutableArray alloc] init]; 
       dataSource8 = [[NSMutableArray alloc] init]; 
       dataSource9 = [[NSMutableArray alloc] init]; 

            [dataSource2 addObject:object2];
            [dataSource3 addObject:object3];
            [dataSource4 addObject:object4];
            [dataSource5 addObject:object5];
            [dataSource6 addObject:object6];
            [dataSource7 addObject:object7];
            [dataSource8 addObject:object8];
            [dataSource9 addObject:object9];
        }
}
-(void)viewDidLoad{//或其他方法
//其他代码
}
-(void)parseFunction{
//这里我介绍了alloc和init数组:
数据源2=[[NSMutableArray alloc]init];
数据源3=[[NSMutableArray alloc]init];
数据源4=[[NSMutableArray alloc]init];
数据源5=[[NSMutableArray alloc]init];
dataSource6=[[NSMutableArray alloc]init];
数据源7=[[NSMutableArray alloc]init];
数据源8=[[NSMutableArray alloc]init];
数据源9=[[NSMutableArray alloc]init];
//解析代码
//对数组执行一些操作并进行迭代,例如:
对于(int i=1;i<[数组计数];++i){
[dataSource2 addObject:object2];
[dataSource3 addObject:object3];
[dataSource4 addObject:object4];
[dataSource5 addObject:object5];
[dataSource6 addObject:object6];
[dataSource7 addObject:object7];
[dataSource8 addObject:object8];
[dataSource9 addObject:object9];
}
}
案例3:解析函数和迭代周期内的alloc和init数组

- (void)viewDidLoad { // or another method

    // other code
}

- (void)parseFunction {

    // here I alloc and init arrays: 

    dataSource2 = [[NSMutableArray alloc] init]; 
    dataSource3 = [[NSMutableArray alloc] init]; 
    dataSource4 = [[NSMutableArray alloc] init]; 
    dataSource5 = [[NSMutableArray alloc] init]; 
    dataSource6 = [[NSMutableArray alloc] init]; 
    dataSource7 = [[NSMutableArray alloc] init]; 
    dataSource8 = [[NSMutableArray alloc] init]; 
    dataSource9 = [[NSMutableArray alloc] init]; 

    // parsing code
    // do something with arrays and iterate, example:

       for (int i = 1; i < [arrays count]; ++i) {

            [dataSource2 addObject:object2];
            [dataSource3 addObject:object3];
            [dataSource4 addObject:object4];
            [dataSource5 addObject:object5];
            [dataSource6 addObject:object6];
            [dataSource7 addObject:object7];
            [dataSource8 addObject:object8];
            [dataSource9 addObject:object9];
        }
}
- (void)viewDidLoad { // or another method

    // other code
}

- (void)parseFunction {

    // parsing code, alloc init and iterate, all in the same cycle:

       for (int i = 1; i < [arrays count]; ++i) {

       dataSource2 = [[NSMutableArray alloc] init]; 
       dataSource3 = [[NSMutableArray alloc] init]; 
       dataSource4 = [[NSMutableArray alloc] init]; 
       dataSource5 = [[NSMutableArray alloc] init]; 
       dataSource6 = [[NSMutableArray alloc] init]; 
       dataSource7 = [[NSMutableArray alloc] init]; 
       dataSource8 = [[NSMutableArray alloc] init]; 
       dataSource9 = [[NSMutableArray alloc] init]; 

            [dataSource2 addObject:object2];
            [dataSource3 addObject:object3];
            [dataSource4 addObject:object4];
            [dataSource5 addObject:object5];
            [dataSource6 addObject:object6];
            [dataSource7 addObject:object7];
            [dataSource8 addObject:object8];
            [dataSource9 addObject:object9];
        }
}
-(void)viewDidLoad{//或其他方法
//其他代码
}
-(void)parseFunction{
//解析代码、alloc init和iterate,都在同一个循环中:
对于(int i=1;i<[数组计数];++i){
数据源2=[[NSMutableArray alloc]init];
数据源3=[[NSMutableArray alloc]init];
数据源4=[[NSMutableArray alloc]init];
数据源5=[[NSMutableArray alloc]init];
dataSource6=[[NSMutableArray alloc]init];
数据源7=[[NSMutableArray alloc]init];
数据源8=[[NSMutableArray alloc]init];
数据源9=[[NSMutableArray alloc]init];
[dataSource2 addObject:object2];
[dataSource3 addObject:object3];
[dataSource4 addObject:object4];
[dataSource5 addObject:object5];
[dataSource6 addObject:object6];
[dataSource7 addObject:object7];
[dataSource8 addObject:object8];
[dataSource9 addObject:object9];
}
}

好的,我的应用程序在所有3种情况下都不会崩溃,但是我想阅读一篇关于我应该在哪里分配大量数组的解释:这是一样的吗?或者,在性能和内存分配方面,是否存在避免某些问题的最佳位置?谢谢

3rd不正确。您多次创建/分配所有阵列,并且只存储最后一个阵列

第一和第二都很好。这取决于你的要求。如果您确定这些数组在调用方法时只需要一次,而在其他地方不需要。那么2就可以了。 但如果你叫它两次,它就会像3


但是,所有属性都在viewDidLoad方法中初始化

3rd不正确。您多次创建/分配所有阵列,并且只存储最后一个阵列

第一和第二都很好。这取决于你的要求。如果您确定这些数组在调用方法时只需要一次,而在其他地方不需要。那么2就可以了。 但如果你叫它两次,它就会像3

但是,所有属性都在viewDidLoad方法中初始化

案例3:

完全不正确:在每次迭代中,您都在“重置”数组内容;在循环结束时,数组将只包含添加的最后一个元素

案例1:

在视图生命周期中初始化数组一次;然后,每次执行parse函数时,都会向这些相同的数组添加新元素;当您不断调用解析方法时,数组将变得越来越大,并且将包含(比如)所有解析的“历史记录”

案例2:

每次进入parse函数时,都要“重置”数组,然后用新元素填充它们;在循环结束时,数组将只包含最后一个解析任务的结果

所以,在1和2之间,这取决于你想做什么;这两件事都有道理,我打赌是2

编辑:

答复你的其他问题(评论):


谢谢你@sergio,到目前为止你的解释是最好的;但是在ViewController中分配和初始化数组的危险和问题是什么

我不会谈论危险或问题:它可以完美地工作,至少对于简单的应用程序是如此

另一方面,假设您希望在两级视图中显示您解析的内容:首先是一个项目列表(假设一个表);那么,当你选择