setNeedsDisplay
nie jest dobrym przykładem tego, co opisujesz, ponieważ faktycznie jest uruchamiany za każdym razem to nazwać. Po prostu ustawia flagę. Ale pytanie jest dobre.
Jednym z rozwiązań jest użycie NSNotificationQueue z NSNotificationCoalescingOnName
.
Innym rozwiązaniem jest zbudowanie trampoliny do samodzielnego łączenia. Nie mam naprawdę dobrego bloga dla trampolin, ale oto przykład jednego (LSTrampoline). Nie jest trudno to zbudować, jeśli chcesz połączyć komunikaty przez pewien okres czasu. Kiedyś zbudował trampolina z forwardInvocation:
podobne do tego:
- (void)forwardInvocation:(NSInvocation *)invocation {
[invocation setTarget:self.target];
[invocation retainArguments];
[self.timer invalidate];
self.timer = [NSTimer scheduledTimerWithTimeInterval:self.timeout invocation:invocation repeats:NO];
}
To rzeczywiście scala wszystkie wiadomości do obiektu w okresie czasu (nie tylko dopasowania messages). To wszystko, czego potrzebowałem do konkretnego problemu. Możesz jednak rozwinąć to, aby śledzić, które selektory są połączone, i sprawdzić swoje inwokacje, aby sprawdzić, czy pasują do siebie "dostatecznie".
Aby uzyskać to do uruchomienia na kolejnej pętli zdarzeń, wystarczy ustawić limit czasu na 0.
Ciągle czyli blog o trampoliny. Wymagane szyling: My upcoming book obejmuje trampoliny w rozdziale 4 i rozdziale 20.
@Barious Użyłem UIKit jako przykładu, ale myślę, że pytanie dotyczy ogólnie Kakao, czyż nie? –
Prawdopodobnie. Jeśli masz pewność, że każde podejście w systemie Mac OS X dotyczy Twojego pytania, dodaj tag kakao. –