有没有办法避免调用tabbarcontroller之类的viewdidload方法?

时间:2016-12-02 04:27:07

标签: ios objective-c iphone uinavigationcontroller viewdidload

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

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

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

这就是为什么我要避免使用像viewdidload这样的tabbarcontroller方法。

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:2)

viewDidLoad正在被调用,因为当您从导航控制器的顶部弹出MapViewController时,MapViewController将被取消分配。重新创建视图控制器时,它将再次分配,并再次加载视图。如果在包含导航控制器的类中保留对viewDidLoad的引用,则ARC将不会释放该对象,您可以使用此引用将其推回到堆栈中,以便{@ 1}}不会被调用试。

编辑:添加代码供参考:

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];
}

答案 1 :(得分:0)

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

如果您不想这样做,请将viewDidLoad设为空。比避免。或

  

将代码conditionaly添加到viewDidLoad。

 (void)viewDidLoad {
    [super viewDidLoad];

    if(condition) {
    // put your code here      
    }

  }

答案 2 :(得分:0)

Try this

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