0

我仍在努力瞭解NSOperations。我希望用戶能夠發起HTTP請求,將該請求封裝到NSOperation對象中,然後將其忘掉。我想在我的主代碼中釋放NSOperation對象,但是通過NSOperationQueue保留它。NSOperatioQueue保留NSOperation

每個NSOperation通過將結果保存到核心數據中完成,或者可以取消。但是,我認爲我只需要取消所有未完成的操作,而不是單個操作。例如,如果應用程序正在終止,我可能會取消它們。

這使我可以讓用戶繼續發起請求,而不必單獨跟蹤它們。我可以重複使用相同的對象指針來初始化NSOperation對象,對它進行排隊,然後釋放它。這看起來非常簡單,如果NSOperationQueue在添加時保留了NSOperation。

我正確的說,隊列將保留操作,所以我可以釋放它實例化的地方?

此外,由於我是ARC新手(我還沒有嘗試過),我該如何轉移此所有權?我想我希望NSOperation在隊列中擁有強大的屬性屬性,但我不認爲我想用弱屬性屬性來實例化它。

回答

1

你說得對。 NSOperationQueues保留(強烈參考)NSOperations添加到它。 自動從隊列中移除並在操作結束時釋放。

您應該確保您的NSOperation子類符合KVO isExecuting並且isFinished失敗,NSOperationQueue不知道NSOperation是否完成。

使用ARC,在這種情況下,您不必「轉移」所有權。只有在創建Core Foundation對象(如CF * Create或CF * alloc)的方法並將其分配給Objective-C對象時,才能「轉移」所有權。

如果您有興趣,我寫了關於ARC on my blog的詳細信息。

您可能也想看看MKNetworkKit,我寫的網絡框架,可以處理您所需要的幾乎所有功能。

+0

謝謝,Mugunth。這兩個參考資料看起來都很棒。我已經搜遍了MKNetworkKit以更好地理解我需要了解的有關NSOperation的一些基本知識。迄今爲止,ARC博客也是很好的閱讀。它看起來非常完整。 – Jim 2012-02-20 06:33:27

+0

「你應該確保你的NSOperation子類符合KVO isExecuting並且isFinished失敗,NSOperationQueue不知道NSOperation是否完成。」值得強調。 – prajul 2013-05-29 09:13:10