1

我有一段代码正在尝试优化。该方法被大量使用,因此任何微小的改进都会大大提高性能。

- (CGRect)calculateRectForItemAtIndex:(NSIndexPath*)path {
    //Get the x position stored in an NSMutableArray
    double x = [self.sectionXPlacementArray[path.section] doubleValue];
    double y = 0;
    double height = 0;

    //If this is the first row it is a header so treat it different 
    if (path.row == 0) {
        height = self.defaultHeaderHeight;
        y = 0;
    }
    else {
        height = self.defaultHeight;
        //Calculate the Y placement 
        y = (path.row-1)*self.defaultHeight+self.defaultHeaderHeight;
    }
    //Build and return a CGRect
    return CGRectMake(x, y, [self.headerSizes[self.headers[path.section]] doubleValue],height);
}

以下是更多信息:

1)看起来像这样headerSizesNSMutableDictionary

{
    Header1 = 135;
    Header2 = 130;
    Header3 = 130;
}

2)看起来像这样headersNSMutableArray

(
    Header1,
    Header2,
    Header3
)

应用程序中的这些值不会是 Header_。它们将是动态的 NSString,例如“City”或“State”。headerSizes将包含应用于每个标题的宽度。

4

1 回答 1

2

正如另一个人评论的那样,这看起来不像是一种会减慢任何速度的方法。它涉及布置一些东西,对吧?还是画什么?这不应该经常发生(即最坏的情况是每秒 60 次)。你真的有任何证据表明这是瓶颈吗?比如,您是否通过 Instruments 中的 Profiler 模板运行您的代码?这在数据的反向调用树视图中显示为 #1 顶级方法?

也就是说,这里没有什么可以削减的。我尽力了...

- (CGRect)calculateRectForItemAtIndex:(NSIndexPath*)path
{
    //Get the x position stored in an NSMutableArray
    const NSUInteger pathSection = path.section;
    const NSUInteger pathRow = path.row;
    const float x = [self.sectionXPlacementArray[pathSection] floatValue];
    float y = 0;
    float height = 0;

    //If this is the first row it is a header so treat it different
    if (pathRow == 0) {
        height = self.defaultHeaderHeight;
        y = 0;
    }
    else {
        const float defaultHeight = self.defaultHeight;
        height = defaultHeight;
        //Calculate the Y placement
        y = (pathRow-1)*defaultHeight+self.defaultHeaderHeight;
    }
    //Build and return a CGRect
    return CGRectMake(x, y, [self.headerSizes[self.headers[pathSection]] floatValue], height);
}
于 2013-08-23T13:42:59.973 回答