2011-10-24 9 views
0

私はMKMapViewを使用していますが、CLLocationManagerを使用して最後の既知の場所で地図を開始しました。問題はiPhoneとLocation Servicesが、バッテリの使用に関する懸念が高まっています。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

2つのこと... 1)まだ位置情報サービスを使用していますか?通常は、場所や探している変更があるという通知を受け取ったら、デリゲートメソッドの1つでstopメソッドを呼び出します。今すぐあなたは始まりと終わりの間に十分に長く待っていません。 2)コード内のどこでも[map setShowsUserLocation:YES]またはmap.showsUserLocation = YESを呼び出していますか?その場合は、値をnoに設定するまでロケーションサービスを有効にします。 – sho

+0

私はちょうどその時点で地図を初期化するために、最新の既知の場所を取得する必要があります(新規であるかどうかは気にしません)。その後、はい、私はマップを使用しています。 showsUserLocationを使用していますが、使用しなくなったらNOに設定します。 –

+0

あなたのマップビューで私の場所がチェックされていますか?それはあなたが場所を追跡していることを示すロケーションマネージャへの呼び出しに取って代わるものです。 –

答えて

0

位置情報サービスを使用して位置情報を取得するには、2つの方法があります。もう1つはより正確です。

[myLocationManager startMonitoringSignificantLocationChanges]を宣言すると、あなたのiPhoneは、セルタワーから出て新しいタワーに入るたびに場所を確認します。 [myLocationManager startUpdatingLocation]を宣言すると、GPSが位置の変化を検出するたびに(精度によっては1〜3メートルごとに)iPhoneが場所を確認します。

あなたのコードでは、宣言されたLocation Managerを2度停止しようとしています。 2番目の停止命令を削除すると、正しいコードが表示されます:

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