2011-10-24 68 views
0

我正在使用MKMapView,並使用CLLocationManager在最後一個已知位置處啓動地圖,問題在於iPhone和位置服務報告我在完成後仍在使用這些服務,引發了對電池使用的一些擔憂。CLLocationManager不停止/釋放

所以,請幫我正確地釋放這個。

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

兩件事情... 1)你確定你還在使用位置服務?通常情況下,一旦收到通知表明您有位置或您正在查找的更改,就會在其中一個代理方法中致電停止。現在你在開始和結束之間的時間不夠長。 2)你是否在代碼中的任何地方調用[map setShowsUserLocation:YES]或map.showsUserLocation = YES?如果是這樣,這將繼續啓用位置服務,直到您將該值設置爲no。 – sho

+0

我只是需要檢索最新的已知位置(不在乎是否新建)來初始化地圖,這就是爲什麼我使用它的原因。之後,是的,我正在使用地圖。 showsUserLocation,但我不再使用它時將其設置爲NO。 –

+0

你有顯示我的位置檢查你的地圖視圖?這將取代任何向位置經理髮出的電話,表明您正在跟蹤位置。 –

回答

0

有使用定位服務來獲取位置有兩種方式:第一種,不太準確,但更多的電池友好;而第二個更準確。

當您聲明[myLocationManager startMonitoringSignificantLocationChanges]時,您的iPhone會在您每次離開手機信號塔並進入新手機時檢查位置。 當您聲明[myLocationManager startUpdatingLocation]時,每當GPS檢測到位置變化(可能每個1-3米,取決於準確度)時,您的iPhone都會檢查位置。

所以,事情是,在你的代碼中,你試圖停止聲明的位置管理器兩次。只要刪除第二個停止指令,你會得到正確的代碼:

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