【发布时间】:2009-08-14 19:14:08
【问题描述】:
我最近发现自己编写了一段代码来执行核心数据提取,然后分配两个可变数组,初始容量等于从提取返回的结果数:
// Have some existing context, request, and error objects
NSArray *results = [context executeFetchRequest:request error:&error];
NSMutableArray *firstArray = [[[NSMutableArray alloc]
initWithCapacity:[results count]] autorelease];
NSMutableArray *secondArray = [[[NSMutableArray alloc]
initWithCapacity:[results count]] autorelease];
写完后我又看了一遍,有些奇怪:我给[results count] 打了两次电话。结果集可能非常大(数百甚至一千个对象)。
我的第一个要求是将[results count] 分解为一个单独的 NSUInteger,然后将该整数用于每个数组的容量。我的问题:这种手动优化是否必要?编译器是否会识别出它正在运行 [results count] 两次并且只保留该值而无需我明确指定该行为?或者它会运行该方法两次 - 一个潜在的昂贵操作?
与此类似,程序员(尤其是 iPhone 程序员,可用的内存/处理能力有限)应该手动执行哪些其他优化,而不是信任编译器?
【问题讨论】:
标签: objective-c cocoa performance optimization