Cocoa-Touch - pushViewController при использовании ARC - PullRequest
0 голосов
/ 26 января 2012

Мне интересно, как бы я написал свой метод - tabliView:didSelectRowAtIndexPath: при использовании ARC.

С ARC я делаю это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if (self.addContactsVC == nil) {
        self.addContactsVC = [[AddContactsViewController alloc] initWithNibName:nil bundle:nil];

    }

    [self.navigationController pushViewController:self.addContactsVC animated:YES];

}

Что меня интересует, так это то, что слишком много служебной информации я сохраняю в качестве переменной класса контроллера представления. Я думаю, если это «хорошая практика», что я могу повторно использовать контроллер представления каждый раз, когда я хочу поместить его в стек, а не выделять новый каждый раз, когда я хочу выдвинуть контроллер представления?

Может быть, я должен просто сделать вместо этого?:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    AddContactsViewController *addContactsVC = [[AddContactsViewController alloc] initWithNibName:nil bundle:nil];

    [self.navigationController pushViewController:addContactsVC animated:YES];

}

1 Ответ

1 голос
/ 26 января 2012

Это классический компромисс между временем и пространством.

  • Если вы создаете экземпляр VC и сохраняете его, то второй контроллер VC будет представлен пользователю быстрее.Однако затем вы переносите выделение памяти этого контроллера представления, даже если он не используется.

  • С другой стороны, если вы выделяете VC только тогда, когда это необходимо, вы сохраняетев долгосрочной перспективе (в зависимости от того, когда ARC располагает предыдущим VC), но вы теряете выигрыш в скорости по сравнению с предварительным распределением класса.

Без дополнительной информации ответ на вашвопрос "это зависит ..."И это будет зависеть от того, где / если вы видите узкие места в вашем приложении, когда вы тщательно профилируете использование памяти и скорость работы.

Лично я бы предпочел выделить VC, когда вам это нужно, поскольку это упрощает весь коднад.Только в том случае, если пользователи будут жаловаться на медленное появление приложения, я рассмотрю возможность кэширования VC.

...