2016-03-02 75 views
2

請參閱WWDC的視頻https://developer.apple.com/videos/play/wwdc2015/226/ 演講者表明我們可以在兩個相同類型的NSopeation實例之間添加依賴關係。示例顯示警報的NS操作。通過實現這一點,我們可以確保我們不會同時拋出多個警報並且惹惱用戶。 如果一個警報已經顯示下一個警報將等待。使NSOperations互斥

我仍然不知道如何實現NSOperations跨隊列的這種依賴關係。更簡單的話,任何人都可以展示以下兩件事的示例(實現)。

從隊列1.

添加相同的NSOperation類型的多個實例的依賴關係的2.Implementation上操作的從隊列2加法操作B的依賴性,即使它們在不同的隊列的1.Implementation。例如:如果我將「AlertOperation」的多個實例添加到不同的隊列中,我想確保它們仍然在他們自己之間依次發生。

如果實例在目標C中,我將不勝感激。 如果需要,請索取更多解釋。

+0

解釋你的不同隊列是什麼。他們如何以及何時創建和添加操作? – Wain

+0

隊列的目的可以是任何東西。關鍵是,在我上面提到的WWDC視頻中說,我可以在不同的隊列中提醒操作,並使它們彼此依賴。現在,如果來自隊列1的警報操作已經顯示警報,那麼我希望隊列2中的警報操作等待顯示,直到第一次警報操作結束(即警報被解除)。這將確保當用戶已經在他正在看的屏幕上有一個警報時,我不會彈出另一個警報。 –

+0

,我假設在它們之間添加依賴關係給你一些問題,當你嘗試它時? – Wain

回答

7

我是提交該會話的工程師。

簡短的回答是,爲了使您的第二個操作依賴於第一個操作,您必須保持對第一個操作的引用。

隨會話提供的示例代碼使用全局表來跟蹤所有當前正在執行的操作。 When a new operation comes in that specifies it should be mutually exclusive與其他同類型的作業,the code looks up in the table for the other operations of the same kind。然後,新操作取決於列表中的最後一個操作。

由於該表是全局表,因此無論實際執行的操作是哪個隊列都可以工作。它只需要使用自定義的NSOperationQueue子類(「OperationQueue」)作爲執行操作的東西。

+0

Kudos!我正在實施類似的過程。但不知道這是否是最好的方法。謝謝戴夫。 –

+1

我們是否可以希望今年的後續會議能夠展示不錯的技術,可以在不使用臨時文件的情況下將數據從一個NSOperation傳遞到另一個NSOperation? – Mindaugas

+0

@Mindaugas,如果您有權訪問論壇,我可以在這裏找到來自Apple開發人員的好回覆:[https://forums.developer.apple.com/thread/25761](https://forums.developer.apple。 COM /線程/ 25761) –

0

從意見,基本問題是:

我怎麼能添加一個依賴於現有的操作時,我沒有對它的引用

您應該創建多個不同的隊列,特別是在這種情況下,僅用於警報操作的隊列。從技術上講,它可以用一個隊列工作,但你需要做更多的工作。

使用特定的隊列,您可以簡單地迭代當前隊列中的操作並向每個隊列添加依賴項。如果你沒有一個特定的隊列,那麼你需要做一個類測試(或使用其他邏輯)來確定哪些操作添加依賴。

+0

我們在這裏稍微離題了一點。我的問題仍然是上述主要問題主體中的兩點。 –

+0

這回答了這些問題,您需要將操作分組到特定隊列中,以便您可以找到它們,或者您需要搜索隊列上的操作以找到正確的操作 – Wain