调用popToViewController的正确方法 - iOS

时间:2015-09-13 04:14:15

标签: ios objective-c uinavigationcontroller poptoviewcontroller

我正在与我的团队成员讨论popToViewController。

对我来说最好的方法是 Can i pop to Specific ViewController?

但他认为我们应该创建viewController的静态实例,然后调用

-(void)takeToPreviousViewController {
    if([IVPreviousViewController sharedInstance]) {
        [self.navigationController popToViewController:[IVPreviousViewController sharedInstance] animated:YES];
    }
}

我强烈建议使用这种方法,因为我们在IVPreviousViewController中创建一个与currentViewController无关的公共方法。我们应该总是避免像这样暴露方法。

任何人都可以指出我最好的方法。

更新

IVPreviousViewController.h

__weak static IVPreviousViewController * staticEventDetailViewController;

    +(IVPreviousViewController *)sharedInstance;

IVPreviousViewController.m

+(IVPreviousViewController *)sharedInstance {
    return staticEventDetailViewController;
}

这种方法的原因 - 在我们的viewController中的特定用例中,它必须popback到IVPreviousViewController

2 个答案:

答案 0 :(得分:2)

这是我对此的看法:

我支持你的意见。我们应尽可能避免使用静态共享实例。静态实例在应用程序生存期内保留在内存中。从该实例引用的所有其他对象也将保留在内存中。

使用上面提到的方法,不再需要的共享链接VC将从内存中取出。此外,如果您没有很多VC,最好从源VC中对目标VC进行弱引用,而不是循环并选择目标VC。

是的,在目标C的上下文中为了更好的可读性,头文件应该只包含那些外部世界真正需要的API。

答案 1 :(得分:1)

我认为你可以做这样的事情

[['product1',100],['product2',90], ...]