2012-04-24 43 views
1

的區別誰能給我完美的差異的描述NSOperationQueueNSAutoReleasePool之間是什麼NSOperationQueue和NSAutoReleasePool

+5

它們的存在是爲了解決完全不同的問題。自行車和電視機之間的完美區別是什麼? – 2012-11-30 22:13:44

回答

6

NSOperationQueue級調節一組的NSOperation對象的執行。在添加到隊列後,操作將保留在該隊列中,直到它被明確取消或完成其任務。隊列中的操作(但尚未執行)本身根據優先級和操作間對象依賴性進行組織,並相應執行。應用程序可能會創建多個操作隊列並將操作提交給它們中的任何一個。

即使這些操作位於不同的操作隊列中,操作間依賴關係也會爲操作提供絕對執行順序。操作對象在其所有依賴操作完成執行之前不會被視爲準備好執行。對於準備執行的操作,操作隊列始終執行相對於其他就緒操作而言具有最高優先級的操作隊列。

NSAutoreleasePool 在引用計數環境(而不是一個其使用垃圾收集),一個NSAutoreleasePool對象包含已經收到一個自動釋放消息,並排出時,它發送一個釋放消息發送到每個這些對象的對象。因此,將autorelease而不是釋放發送給對象會延長該對象的生命週期,至少直到池本身耗盡(如果該對象隨後被保留,則可能會更長)。一個對象可以放入同一個池中多次,在這種情況下,每次將對象放入池中時都會收到一條釋放消息。

您使用通常的alloc和init消息創建一個NSAutoreleasePool對象,並使用drain或release來處理它(瞭解其差異,請參閱「Garbage Collection」)。既然你不能保留一個自動釋放池(或自動釋放它,請參閱retain和autorelease),那麼排除一個池最終會導致釋放它。您應始終在自己創建的上下文中調用自動釋放池(調用方法或函數或循環體)。有關更多詳細信息,請參閱自動釋放池。

對於下列準則詳情,請訪問...

NSAutoreleasePool

NSOperationQueue

希望,這將幫助你..

2

你可以很容易地發現這個蘋果的開發文檔中:

NSAutoreleasePool

NSAutoreleasePool類用於支持Cocoa的 引用計數的內存管理系統。自動釋放池存儲 對象,當池本身被排空時,會發送釋放消息。

NSOperationQueue

NSOperationQueue類調​​節一組 NSOperation對象的執行。在添加到隊列後,操作 會保留在該隊列中,直到它被明確取消或完成 執行其任務。隊列中的操作(但尚未執行)本身按優先級和操作間對象依賴關係進行組織,並相應執行。應用程序可以創建多個操作隊列並將操作 提交給它們中的任何一個。