Alloc和init NSArrays位于Objective-C中解析函数的内部还是外部?
我试图了解在Objective-C ARC应用程序中,在何处更好地分配阵列: 案例1:解析函数外部的alloc和init数组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
- (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中分配和初始化数组的危险和问题是什么 我不会谈论危险或问题:它可以完美地工作,至少对于简单的应用程序是如此 另一方面,假设您希望在两级视图中显示您解析的内容:首先是一个项目列表(假设一个表);那么,当你选择