私はKVOで販売されていますが、明白な方法で使用される場合は同期しています。私は、KVOのメッセージが急速に連続して発射されている状況でそれを使用したいと考えており、KVOのメッセージが処理されると、私のアプリが停止するようになっています。誰かが、おそらくNSOperation
またはNSThread
を使って、ここで動作するアプローチを提案できますか?KVO岩。今私はどのように非同期に使用しますか?
私の目標は、可能であれば、KVOのデカップリングされた柔軟性を維持することです。
私はKVOで販売されていますが、明白な方法で使用される場合は同期しています。私は、KVOのメッセージが急速に連続して発射されている状況でそれを使用したいと考えており、KVOのメッセージが処理されると、私のアプリが停止するようになっています。誰かが、おそらくNSOperation
またはNSThread
を使って、ここで動作するアプローチを提案できますか?KVO岩。今私はどのように非同期に使用しますか?
私の目標は、可能であれば、KVOのデカップリングされた柔軟性を維持することです。
NSNotificationを確認してください。それは全く同じことではありませんが、少しの研究と作業で、バックグラウンドスレッドの通知を消すことができます。素敵なデカップリングと消し忘れの動作を維持することができます。
KVOは、KVO通知が変更と同じスレッドで配信されるという点で、本質的にシングルスレッドです。
もちろん、UIKitとCocoaの両方は、本当にあなたが主なスレッド上で邪魔なUI要素であることを望みます。
したがって、非同期操作を行っている場合、スレッドを使用している可能性が高くなります。同期スレッドでは、スレッドからメインスレッドにnotifを取得する必要があります。
そしてそこに鍵があります。表示されている各変更通知を盲目的に転送する代わりに、変更通知を統合してメインスレッドに渡すことができます。
これを行うためのさまざまな方法があります。特定のソリューションは、アプリケーションにとって非常にユニークなものになるでしょう。
個人的には、きめ細かい操作の融合と先を避けようとしています。私は、オブジェクトの特定のサブグラフが変更されたことをメインスレッドに伝えるほうがずっと簡単です。おそらく、ユーザーが変更を表示できるようにする描画コードは、関連する状態を再描画する必要があるため、関連する変更が自動的に反映されます。
あなたが推測しているように、キーはアプリの応答性を低下させないように通知を絞り込むことです(またはデバイスのバッテリー寿命を破壊する)。
bbum、 おかげで推奨されているように受付・パターンを使用してください。ちょっとだけ詳しく説明してください。私はグラフィックアプリをやっています。タッピング、サウンドf/x、ビジュアルが常に発生しています。私の計画は、特定の行動に基づいて健全なf/xを引き起こすKVOに大きく依存することです。トリガーサウンドは、激しく激しくなり、それぞれが1秒以上再生することができます。あなたはKVOを放棄し、同時に非ブロッキングサウンドf/xのNSOperationインスタンスを作成することをお勧めしますか? 乾杯、 Doug – dugla
ありがとうございました。はい、NSNotificationはKVOよりも私のニーズに適しているようです。乾杯。 – dugla
GCD(Grand Central Dispatch)と非同期でKVOを使用するのはかなり簡単です。 NSNotificationはKVOよりもはるかに柔軟性が低く、多くの場合、効果的な代替ではないかもしれません。 – mjmdavis