2010-02-07 57 views
1

我使用下面的代碼進行選擇後,有多個延遲傳遞的參數:壓倒一切的NSObject並添加類變量

http://nifty-box.com/blog/2006/12/nsinvocation-cleans-code.html

它工作得很好,但我需要擴展這個支持相當於:

[NSObject的cancelPreviousPerformRequestsWithTarget:自我]

(在這種情況下,也不會自我的目標,但會_UFLatePerformer的實例,我相信)

有沒有辦法做到這一點,所以我的視圖的解除分配可以殺死所有剩餘的延遲性能請求?

回答

2

在Mac上,你將能夠使用objc_setAssociatedObject,但iPhone上不存在。

因此,基本上你需要某種類型的管理單例,爲你保存這些引用,你傳入一個NSObject並且它做你想做的事。

當我做類似的事情時,我寫了一個singleton類,它接受請求來執行一個動作,並啓動一個定時器,在動作完成時觸發 - 當時我的經理類決定是否有問題的請求仍然有效,如果是的話,解僱這一行動。因此,我可以有效地取消定時器,並且還可以告訴管理器重置定時器,但這並不是真的,它只是創建了一個新定時器,但是當舊定時器解除了請求執行的動作時無效。

所以基本上,計時器只需要一個請求標識就返回單身人士,這導致一個包含該調用細節的字典條目。

+0

這是我能想到的唯一解決方案,但我確實試圖避免創建單例和管理選擇器列表。一旦我確定我*將不得不麻煩,我只是擺脫了我的重頭戲NSObject,並將我的所有變量都封裝在一個NSDictionary中。這樣,我就可以使用標準的performSelector:withObject:afterDelay - 這意味着cancelPreviousPerformRequestsWithTarget:self會按預期工作。 – 2010-02-07 21:24:41