2013-08-26 24 views
3

我的應用程序獲取當前設備位置,將其發佈到我的服務器,並返回一個字典以顯示在表格視圖中。目前,我正在使用CLLocationManager委託方法和AFJSONRequestOperation(AFNetworking的NSOperation類中的NSURLConnection中的retrieve-data-through-NSURLConnection)來完成這項工作,但此功能位於一個視圖控制器方法內,我希望能夠重用此操作跨越其他視圖控制器。我可以在沒有隊列的情況下在另一個NSOperation內部啓動一個NSOperation嗎?

我打算做我自己的NSOperation子類,但首先我想知道是否有任何看不見的陷阱,讓NSOperations(AFJSONRequestOperation)在另一個NSOperation內部啓動。這是否按預期工作,或者我應該找到一種方法來在操作之間建立依賴關係的隊列?

回答

2

在NSOperation中調度NSULRL連接操作將失敗,除非您在主運行循環中安排它。 AFJSONOperation(或AFURLOperation的任何子類)都會成功,因爲在這種情況下,AFNetworking操作將按照他們自己的NSOperationQueue和自定義運行循環進行安排。

所以 - 是的。去吧。我使用NSOperation子類來隔離我所有的工作進程。這比在風險投資或模型中排除GCD要乾淨得多。

警告 - 由於所有AFNetworking操作都是基於塊並異步返回的,因此您的NSOperation子類將需要併發。 Apple提供瞭如何在他們的文檔中構建Concurrent NSOperation Subclasses

的詳細說明(可選) - 您可以跳過構建併發NSOperation子類,並從NSOperation中同步觸發您的網絡操作,因爲您已經離開主隊列。

0

所有NSOperation的東西都使用GCD,GCD沒有嵌套dispatch_async調用的問題,所以我懷疑嵌套NSOperations會導致你的問題,只要你的邏輯是正確的。

相關問題