Mac*_*iło 4 objective-c automatic-ref-counting
我在我的iOS应用程序中使用ARC.我已经分析了下面的方法,即使算法是非常幼稚和浪费,77%的时间花在objc_retain和objc_release.我认为它必须归结为我从中获取单元的行,NSArray并且ARC小心地保留然后每次释放对象.
我正在寻找一个明智的建议:如何优雅地解决它?
-(CGFloat)getUncertaintyForUnits:(NSArray*)units Position:(MKMapPoint)position Zoom:(MKZoomScale)zoomScale {
CGFloat closest = MAXFLOAT;
for (int i = 0; i < [units count]; i++) {
Unit *units = (Unit*)[units objectAtIndex:i];
CGFloat distance = [self distanceBetweenMapPoints:unit.mapPoint And:position];
if (distance < closest) {
closest = distance;
}
}
CGFloat max = 100 / zoomScale;
return (1. - closest / max) * 0.9;
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*ica 10
你可以尝试快速枚举:
for (Unit *unit in units) {
CGFloat distance = [self distanceBetweenMapPoints:unit.mapPoint And:position];
if (distance < closest) {
closest = distance;
}
}
Run Code Online (Sandbox Code Playgroud)
这应该避免额外的保留/释放,因为在快速枚举中整个数组被阻止.
使用快速枚举有几个好处:
- 枚举比例如直接使用NSEnumerator更有效.
- 语法简洁.
- 枚举是"安全的" - 枚举器具有变异防护,因此如果您在枚举期间尝试修改集合,则会引发异常.