【问题标题】:Cocoa-Touch – pushViewController when using ARCCocoa-Touch – 使用 ARC 时的 pushViewController
【发布时间】:2012-01-25 20:43:42
【问题描述】:

我想知道在使用 ARC 时如何编写 - tabliView:didSelectRowAtIndexPath: 方法。

使用 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];

}

【问题讨论】:

    标签: objective-c cocoa-touch uinavigationcontroller automatic-ref-counting


    【解决方案1】:

    这是时间和空间之间的经典权衡。

    • 如果您实例化 VC 并保存它,那么您将第二次更快地将该 VC 控制器呈现给用户。但是,即使该视图控制器没有被使用,您也会执行该视图控制器的内存分配。

    • 1234563 - 分配类。

    如果没有更多信息,您的问题的答案是“这取决于...”。当您彻底分析内存使用情况和速度性能时,这将取决于您在哪里/是否看到应用程序中的瓶颈。

    我个人更愿意在需要时分配 VC,因为这样可以简化代码。只有当用户抱怨应用程序运行缓慢时,我才会考虑缓存 VC。

    【讨论】:

    • 保存视图控制器的另一个原因是,如果您希望在弹出和推送时能够保持视图控制器的当前状态。
    • @PeterWarbo .. 起初我以为“嗯 .. 没想到”,然后我想“嗯,状态应该在模型中”。不确定这些想法是否是确定的。
    • 好吧,像NSString 这样的模型对象是在视图控制器中设置的,它会被推送和弹出。如果我每次都分配视图控制器来推送它,那么模型对象将为零,除非我重用相同的视图控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多