Мое приложение работает очень медленно при распознавании жестов

Я делаю приложение для iPhone в iOS 5.

В этом я расширяю и перезагружаю 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];
}

1 ответ

Прежде чем пытаться выяснить, что оптимизировать, вы должны измерить, где проблема. Вы можете сделать это, используя инструменты Time Profile и Core Animation. Используйте меню продукта XCode и выберите Профиль. Убедитесь, что вы профиль, когда вы подключены к устройству, которое, как вы заметили, имеет характеристики производительности, отличные от симулятора.

Инструмент Time Profile поможет вам определить работу, выполненную на CPU. Инструмент Core Animation поможет вам определить работу, выполняемую Core Animation как на CPU, так и на GPU. Обратите внимание на флажки опций отладки инструмента Core Animation. Они немного загадочны, но помогут вам визуально идентифицировать части вашего пользовательского интерфейса, которые заставляют Core Animation выполнять большую работу.

Документация по различным инструментам, доступным для iOS, находится здесь.

Я также рекомендую видео WWDC, охватывающее Core Animation.

Другие вопросы по тегам