0

我在 iOS 5 中做一个 iPhone 应用程序。

我在识别捏合手势的同时扩展并重新加载 uitableview。

它在模拟器中效果很好。但在设备中它的工作速度很慢。例如,在 UIGestureRecognizerStateEnded 之后的设备中,只有所有行会被扩展,但在模拟器中,行正在扩展和重新加载,而 UIGestureRecognizerStateChanged 本身。

对内存问题有什么建议吗?

我的代码在这里

if (pinchRecognizer.state == UIGestureRecognizerStateBegan) {

    self.initialPinchHeight = rowHeight;

    [self updateForPinchScale:pinchRecognizer.scale];
}
else {
    if (pinchRecognizer.state == UIGestureRecognizerStateChanged) {
        [self updateForPinchScale:pinchRecognizer.scale];

    }
    else if ((pinchRecognizer.state == UIGestureRecognizerStateCancelled) || (pinchRecognizer.state == UIGestureRecognizerStateEnded)) {
    }
}

-(void)updateForPinchScale:(CGFloat)scale{

CGFloat newHeight = round(MAX(self.initialPinchHeight * scale, DEFAULT_ROW_HEIGHT));

rowHeight = round(MIN(30.0, newHeight));
/*
 Switch off animations during the row height resize, otherwise there is a lag before the user's action is seen.
 */
BOOL animationsEnabled = [UIView areAnimationsEnabled];
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
NSArray *visibleRows = [self.tableView indexPathsForVisibleRows];
[self.tableView reloadRowsAtIndexPaths:visibleRows withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:animationsEnabled];
}
4

1 回答 1

0

在试图弄清楚要优化什么之前,您应该衡量问题出在哪里。您可以使用 Time Profile 和 Core Animation 工具来执行此操作。使用 Xcode 的 Product 菜单并选择 Profile。确保在连接到设备时进行配置文件,正如您所注意到的,该设备具有与模拟器不同的性能特征。

Time Profile 仪器将帮助您识别在 CPU 上完成的工作。Core Animation 工具将帮助您识别 Core Animation 在 CPU 和 GPU 上所做的工作。注意核心动画工具的调试选项复选框。它们有点神秘,但可以帮助您直观地识别 UI 中使 Core Animation 完成大量工作的部分。

有关适用于 iOS 的不同仪器的文档,请点击此处

我还推荐了涵盖 Core Animation的WWDC 视频。

于 2012-04-25T06:06:18.353 回答