1

NSOperationQueueとの完璧な違いについて誰かに説明してもらえますかNSAutoReleasePool

4

2 に答える 2

6

NSOperationQueueクラスは、一連のNSOperationオブジェクトの実行を制御しますキューに追加された後、操作は明示的にキャンセルされるか、タスクの実行が終了するまで、そのキューに残ります。キュー内の操作(まだ実行されていない)は、それ自体が優先度レベルと操作間のオブジェクトの依存関係に従って編成され、それに応じて実行されます。アプリケーションは、複数の操作キューを作成し、それらのいずれかに操作を送信できます。

操作間の依存関係は、操作が異なる操作キューにある場合でも、操作の絶対的な実行順序を提供します。操作オブジェクトは、依存するすべての操作が実行を終了するまで、実行の準備ができているとは見なされません。実行の準備ができている操作の場合、操作キューは常に、他の準備ができている操作に比べて優先度が最も高い操作を実行します。

NSAutoreleasePool 参照カウント環境(ガベージコレクションを使用する環境ではなく)では、NSAutoreleasePoolオブジェクトには、自動解放メッセージを受信したオブジェクトが含まれ、排出されると、それらの各オブジェクトに解放メッセージが送信されます。したがって、リリースの代わりに自動リリースをオブジェクトに送信すると、少なくともプール自体が排出されるまで、そのオブジェクトの存続期間が延長されます(オブジェクトが後で保持される場合はさらに長くなる可能性があります)。オブジェクトは同じプールに数回入れることができます。その場合、オブジェクトはプールに入れられるたびに解放メッセージを受け取ります。

通常のallocおよびinitメッセージを使用してNSAutoreleasePoolオブジェクトを作成し、それをドレイン(またはリリース)で破棄します。違いを理解するには、「<ahref="https://developer.apple.com/library/mac/#documentation」を参照してください。 /Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html#//apple_ref/doc/uid/20000051-SW5 "rel="nofollow">ガベージコレクション")。自動解放プールを保持することはできないため(または自動解放-保持と自動解放を参照)、プールを空にすることは最終的にプールの割り当てを解除する効果があります。自動解放プールは、作成されたのと同じコンテキスト(メソッドまたは関数の呼び出し、またはループの本体)で常にドレインする必要があります。詳細については、プールの自動解放を参照してください。

詳細については、次のガイドラインをご覧ください...

NSAutoreleasePool

NSOperationQueue

うまくいけば、これはあなたを助けるでしょう..

于 2012-04-24T07:04:02.440 に答える
2

これは、Appleの開発ドキュメントで簡単に見つけることができます。

NSAutoreleasePool

このNSAutoreleasePoolクラスは、Cocoaの参照カウントメモリ管理システムをサポートするために使用されます。自動解放プールは、プール自体が空になったときに解放メッセージが送信されるオブジェクトを格納します。

NSOperationQueue

このNSOperationQueueクラスは、一連の NSOperationオブジェクトの実行を規制します。キューに追加された後、操作は明示的にキャンセルされるか、タスクの実行が終了するまで、そのキューに残ります。キュー内の操作(まだ実行されていない)は、それ自体が優先度レベルと操作間のオブジェクトの依存関係に従って編成され、それに応じて実行されます。アプリケーションは、複数の操作キューを作成し、それらのいずれかに操作を送信できます。

于 2012-04-24T07:04:17.917 に答える