0

私はアプリ内でコアロケーションフレームワークを使用しており、didUpdateToLocationメソッドで更新されたロケーションをサーバーに送信しています。CLLocationManagerインスタンスを割り当てているビューはログイン後の2番目のビューであり、このビューはログインビューから呼び出され、deallocメソッドでCLLocationManagerを解放しますが、ログイン画面から来たとき、didUpdateToLocationメソッドがログインビューから来た回数に応じて2回と3回呼び出されるので、問題は何ですか?これを回避するにはどうすればよいですか?

4

2 に答える 2

1

私は通常、このタイプのものにシングルトンを使用します。クラスメソッドを定義するだけです(メソッド定義で+と-を使用)。シングルトン定義の例を次に示します。

+(id)sharedLocationManager
{
static BCLocationManager *sharedLocationManager;
@synchronized(self)
{
    if (!sharedLocationManager)
    {
        sharedLocationManager = [[BCLocationManager alloc] init];
    }

    return sharedLocationManager;
}
return sharedLocationManager;
}

基本的に、クラスの静的インスタンスを定義し、それが存在しない場合にのみ初期化します。シングルトンでは、インスタンスのinit関数にアクセスすることはありません。シングルトンアクセサーの結果は、常に次のように適切なポインターに割り当てます。

BCLocationManager * testInstance = [BCLocationManager sharedLocationManager]; 

これで、適切なheader.hを含めるだけで、アプリケーションのすべてのユーザーがロケーションマネージャーの単一のインスタンスを確認できます。initのインスタンスを使用しない限り、複数のインスタンスを作成することはありません。

于 2012-07-10T05:07:42.233 に答える
1

CLLocationManagerインスタンスの複数の割り当てを回避する場合は、インスタンスをのプロパティとして定義します。appDelegate

このインスタンスを取得する必要があるたびに、

YouAppDelegate *appDelegate = (YouAppDelegate *)[UIApplication sharedApplication].delegate;
appDelegate.yourLocationInstance;
于 2012-06-21T08:05:36.600 に答える