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