2010-06-03 230 views
1

我想確保某些維護任務「最終」執行。例如,在我檢測到某些資源可能不再用於緩存後,我可能會調用:如何合併Objective-C中的延遲/延遲呼叫?

[self performSelector:@selector(cleanupCache)withObject:nil afterDelay:0.5];

但是,可能有很多地方我檢測到這一點,我不想連續調用cleanupCache。我想將多個調用合併到cleanupCache中,以便我們只定期獲得一次對cleanupCache的調用。

下面是我想到的 - 這是最好的方法嗎? (NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cleanupCache)object:nil]; [self performSelector:@selector(cleanupCache)withObject:nil afterDelay:0.5];

回答

0

沒有真正的內置支持你想要的東西。如果這在你的程序中很常見,我會創建一個蹦牀類來跟蹤它是否已經計劃向給定對象發送消息。它不應該佔用20多行代碼。

+0

接受這個答案,因爲這是痛苦的事實。最後,我添加了對緩存類的支持,基本上在原始問題中執行取消/執行順序。 – thrusty 2011-06-02 16:46:29

0

而不是取消待處理的請求,如何保持跟蹤?安排請求時設置一個標誌,並在清理運行時清除它。

+0

我想我想知道的是:有沒有辦法讓NSObject爲我做這件事?顯然,它已經在追蹤延遲選擇器排隊的情況。 – thrusty 2010-06-03 17:35:50