Map Kitのアノテーションは、バックグラウンドで触らない方がいい


音楽のある情景」の絡みで、Map Kitをいじることが多いんだけど。

地図ベースのアプリでは、地図上に多数のアノテーションを作る事になる。ちょっと油断すると、その数は軽く1,000を超える。そこで、このアノテーションの作成や更新をいかに軽くするか、ということが重要になってくる。

ある程度の数がある以上、どんなにがんばっても処理時間は0にはならないので、バックグラウンドに持っていく事になる。そのとき、どこまでもバックグラウンドでやって、どこからをメインスレッドでやるかの見極めがとても重要になる。

Cocoaプログラミングの原則では、ビューに関する操作はメインスレッドでやることになる。じゃあ、ビューじゃなければバックグラウンドでもいいかというと、これがケースバイケースだったりする。

今日はまっていたのは、地図上でアノテーションを表すMKAnnotation。MKAnnotationはプロトコルなんで、それを実装したクラスはこちらで作る事になる。特に親クラスは指定されない。これだったら、バックグラウンドで触ってもいいだろう、と思ってたら、どうもいかんらしい。バックグラウンドスレッドからアノテーションのcoordinateを触ると、どうにも挙動がおかしい。

想像だけど、一度アノテーションがMKMapViewに追加されるとそっちの管理下におかれるみたい。この状態でアクセスするとビューを触るのと一緒になって、バックグラウンドからのアクセスは厳禁、って理屈だろうか?

とりあえず、メインに持っていったら期待通りの挙動になった。難しいのー!

  1. コメントはまだありません。

  1. トラックバックはまだありません。