デバイス上のすべての連絡先を自分のアプリに同期する速度を上げようとしています。現時点では、連絡先を同期するときにメインスレッドをブロックしています。
個々の連絡先のセットアップを NSInvocationOperation に追加し、それを NSOperationQueue に追加しました。
メイン スレッドでしか UI にアクセスできないことはわかっています。アドレス帳のデータでアクセスできないものは何ですか?
デバイス上のすべての連絡先を自分のアプリに同期する速度を上げようとしています。現時点では、連絡先を同期するときにメインスレッドをブロックしています。
個々の連絡先のセットアップを NSInvocationOperation に追加し、それを NSOperationQueue に追加しました。
メイン スレッドでしか UI にアクセスできないことはわかっています。アドレス帳のデータでアクセスできないものは何ですか?
通常、アドレス帳フレームワークはバックグラウンド スレッドから安全に使用できますが、落とし穴があります。重要な注意事項はドキュメントに記載されています。
重要ABAddressBookRef のインスタンスを複数のスレッドで使用することはできません。各スレッドは独自のインスタンスを作成する必要があります。
と
重要レコード オブジェクトはスレッド間で安全に渡すことはできません。代わりに、対応するレコード識別子を渡す必要があります。詳細については、「レコード識別子の使用」を参照してください。
NSInvocationOperation
同じスレッド上にあるからといって、それらが同じスレッドで実行されるとNSOperationQueue
は限らないことに注意してください。