有什么方法可以避免像TabbarController这样的调用ViewDidload方法



我正在开发一个将根据地图工作的应用程序。因此,一旦用户打开MapViewController,我将每5秒加载一些数据。

我正在使用导航控制器(推动视图控制器)。

因此,每次用户到MapViewController viewdidload方法调用时。我不想那样。

这就是为什么我试图避免使用viewdidload之类的CC_4方法。

有什么方法可以实现这一目标?

viewDidLoad被调用,因为当您将其从导航控制器的顶部弹出时,您的MapViewController正在被划分。当您重新创建视图控制器时,它会再次分配,并且视图再次加载。如果您在包含导航控制器的类中保留对MapViewController的引用,则ARC不会对该对象进行处理,并且您可以使用此引用将其推回堆栈上,以便viewDidLoad不会再次被调用。

>

编辑:添加代码以供参考:

MapViewContoller *mapViewController; // declared globally so there's a strong reference.
- (void) openMapViewController {
    if (!mapViewController) {
        mapViewController = [self.storyboard instantiateViewControllerWithIdentifier: MapViewControllerID];
    }
    [self.navigationController pushViewController: mapViewController, animated: YES];
}

尝试此

-(void)clickForPush{
    // declarre viewcontroller e.g 'saveRecipeVC' instance globally in interface
    if (!saveRecipeVC) {
        saveRecipeVC = [self.storyboard instantiateViewControllerWithIdentifier:SaveRecipeVCID];
    }
    [self.navigationController pushViewController:saveRecipeVC animated:YES];
}

viewDidload旨在使用,不可能或有效地配置XIB中的100%接口。有时,您希望在XIB中没有视图。有时,您会使用自动布局,并且您意识到编辑器实际上比编写自动布局代码要差。有时,您需要在将图像设置为按钮的背景之前修改图像。

如果您不想做这些事情,则可以使您的ViewDidload为空。而不是避免。或

将Code Redicealy添加到您的ViewDidload中。

 (void)viewDidLoad {
    [super viewDidLoad];
    if(condition) {
    // put your code here      
    }
  }

最新更新