2

當在NSNotificationQueues上使用合併通知來控制時間範圍時,有什麼辦法嗎?合併NSNotifications

我想合併例如對於下一秒,但據我瞭解的可用選項,它可以立即或在下一次運行循環調用或'空閒時'。

任何其他方式來例如在更長的時間範圍內合併?

我基本上尋找一種方式來收集所有用戶事件(如捏到縮放)在一個小時間範圍內,並啓動昂貴的操作,只有在用戶明顯停止縮放/等。

回答

0

當第一個通知進來時,您可以安排NSTimer。當下一個通知進入時,請檢查您的計時器實例變量。如果它不爲零,則忽略該通知。否則,啓動一個新的定時器

當計時器觸發時,清除計時器實例變量並啓動昂貴的操作。

一個簡單的替代方法是使用performSelector:afterDelay:cancelPreviousPerformRequestsWithTarget:selector:object:。但效果並不相同。每次收到通知時,您都會進一步推遲昂貴的操作。如果通知速度超過您設置的延遲時間,昂貴的操作將永遠不會運行。

+0

對,所以你正在描述一個100%的自定義實現。當然,這是一種方法 - 但與使用內置的合併通知機制無關。 – ATV

+0

是的。我不認爲內置的合併提供了「runloop結束」或「空閒時」之外的任何內容。這對大多數情況已經足夠了。如果您希望每秒觸發不超過一次的昂貴操作,則可能必須使用計時器來實現該操作。 –