【问题标题】:CLLocationManager not stopping/releasingCLLocationManager 不停止/释放
【发布时间】:2011-10-24 20:42:44
【问题描述】:

我正在使用 MKMapView,并使用 CLLocationManager 在最后一个已知位置启动地图,问题是 iPhone 和位置服务报告说我在完成后仍在使用这些服务,这引起了一些对电池的担忧用法。

所以,请帮我正确地发布这个。

CLLocationManager * MANG = [[CLLocationManager alloc] init];
[MANG startMonitoringSignificantLocationChanges];
if(MANG.location){
   [mapa setCenterCoordinate:MANG.location.coordinate animated:NO];
}
[MANG stopMonitoringSignificantLocationChanges];
[MANG stopUpdatingLocation];
[MANG release];

【问题讨论】:

  • 两件事... 1) 你确定你还在使用定位服务吗?通常,一旦您收到通知您有一个位置或您正在寻找的更改,您就会在其中一个委托方法中调用 stop。现在,您在开始和停止之间等待的时间不够长。 2)您是否在代码中的任何位置调用 [map setShowsUserLocation:YES] 或 map.showsUserLocation = YES?如果是这样,这将继续启用位置服务,直到您将值设置为 no。
  • 我只需要检索最新的已知位置(不在乎是否是新​​位置)以在那时初始化地图,这就是我以这种方式使用它的原因。在那之后,是的,我正在使用地图。显示UserLocation,但当我不再使用它时将其设置为NO。
  • 您是否为您的地图视图检查了显示我的位置?这将取代任何显示您正在跟踪位置的位置管理器的调用。

标签: iphone objective-c cllocationmanager


【解决方案1】:

使用定位服务获取位置的方法有两种:第一种,准确度较低但更省电;第二个更准确。

当您声明[myLocationManager startMonitoringSignificantLocationChanges] 时,您的 iPhone 会在您每次离开手机信号塔并进入新手机信号塔时检查位置。 当您声明[myLocationManager startUpdatingLocation] 时,您的 iPhone 会在每次 GPS 检测到位置变化时检查位置(可能每 1-3 米,取决于准确度)。

所以问题是,在您的代码中,您尝试停止声明的位置管理器两次。只需删除第二个停止指令,您就会得到正确的代码:

CLLocationManager * MANG = [[CLLocationManager alloc] init];
[MANG startMonitoringSignificantLocationChanges];
if(MANG.location){
   [mapa setCenterCoordinate:MANG.location.coordinate animated:NO];
}
[MANG stopMonitoringSignificantLocationChanges];
[MANG release];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多