【发布时间】:2014-09-28 18:20:44
【问题描述】:
只是寻找一些关于如何最好地优化 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) 自动释放池
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) 别的?
【问题讨论】:
-
优化什么?时间、美学、可读性、大小、内存使用,其他?
-
内存使用和/或时间。在我看来,这三个都是可读和美观的。当然也欢迎其他建议。
-
如果您要进行运行时,我建议您使用 dispatch_benchmark 进行分析并查看您得到的结果。 (nshipster.com/benchmarking)
-
运行时间不是一个大问题,因为在我的上下文中这是在后台,不需要快速周转,在这种情况下内存更重要。
-
分配工具告诉您什么?您对高水位标记还是脏内存更感兴趣?
标签: objective-c optimization automatic-ref-counting