我正在开发一个将根据地图工作的应用程序。因此,一旦用户打开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
}
}