0

我正在与我的团队成员就 popToViewController 发生争执。

对我来说最好的方法是 我可以弹出到特定的 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 的特定用例中,它必须 popbackto IVPreviousViewController

4

2 回答 2

2

这是我对此的看法:

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

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

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

于 2015-09-13T04:27:31.700 回答
1

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

-(void)popToVC:(ClassNameOfTheViewController)controllerClass{
 for(UIViewController *vc in self.navigationController.viewControllers)
    if( [vc isKindOfClass:[controllerClass class]]){
     [self.navigationController popToViewController:vc animated:YES];
   }
}
于 2015-09-13T09:07:07.673 回答