【问题标题】:Do all ViewControllers run in the background when using TabBarContoller?使用标签栏控制器时,所有视图控制器都在后台运行吗?
【发布时间】:2016-12-04 16:36:10
【问题描述】:

如果我使用 TabBarController,并且当我从 VC1 切换到 VC2 时,我的两个 ViewContoller 访问 GPS (LocationManager),VC1 是否在后台运行(LocationManager 是否处于活动状态)?如果是这样,是否由同时运行 VC2(可见)LocationManager 引起的任何问题?

【问题讨论】:

  • 只要你的tabbarcontroller 有记忆,是的,你所有的viewcontrollers 都会活着。您可以启动服务并在屏幕上显示另一个 vc 时获取更新。
  • 好的,太好了!谢谢你。那么我可以推断,同时运行两者不会产生任何不利影响?
  • 不,他们没有。
  • 您的问题具有误导性。短语“在后台运行”意味着在后台线程上运行。这与视图控制器不是最前面的视图控制器时工作不同。是的,如果您有一个视图控制器创建位置管理器的实例并开始位置更新,即使您在其上推送另一个视图控制器,它也会获得这些更新。但是,这些位置更新方法将在主线程上调用,而不是在后台线程上。
  • 正如马特在回答中所说,您应该阻止位置管理器将更新发送到不在最前面的视图控制器。如果您需要进行全局位置跟踪,那么您可能希望创建自己的单例来订阅位置更新,并让 在该视图控制器需要更新时通知前视图控制器。

标签: ios background locationmanager multiple-instances tabbarcontroller


【解决方案1】:

如果是这样,是否有任何问题是由同时运行 VC2(可见)LocationManager 引起的?

虽然没有严格禁止拥有多个位置管理器实例,但让多个位置管理器同时运行并不是明智的策略。您应该非常小心,在您离开 VC1 时停止 VC1 位置管理器,并在您离开 VC2 时停止 VC2 位置管理器。

【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多