我只是希望得到一些简单建议,关于如何最佳地优化Obj-C和ARC中的for循环(就内存使用而言),以这个未经优化的任意代码为例:
NSMutableArray *array = [NSMutableArray array];
for (NSDictionary *dict in NSArray *arrayOfDicts) {
NSString *first = [dict valueForKeyPath:@"object.first"];
NSString *second = [dict valueForKeyPath:@"object.second"];
NSString *third = [dict valueForKeyPath:@"object.third"];
[array addObject:@[first, second, third]];
}
哪种方法在实践中更好/正确(假设有很多循环,因此可能很重要)?
1)只声明一次,然后复制到数组中。
NSMutableArray *array = [NSMutableArray array];
NSString *first, *second, *third;
for (NSDictionary *dict in NSArray *arrayOfDicts) {
first = [dict valueForKeyPath:@"object.first"];
second = [dict valueForKeyPath:@"object.second"];
third = [dict valueForKeyPath:@"object.third"];
[array addObject:@[[first copy], [second copy], [third copy]]];
first, second, third = nil;
}
2) Autoreleasepool
NSMutableArray *array = [NSMutableArray array];
for (NSDictionary *dict in NSArray *arrayOfDicts) {
@autoreleasepool {
NSString *first = [dict valueForKeyPath:@"object.first"];
NSString *second = [dict valueForKeyPath:@"object.second"];
NSString *third = [dict valueForKeyPath:@"object.third"];
[array addObject:@[first, second, third]];
}
}
3) Something else?
@autoreleasepool
。 - Bryan Chen