Użyłem metody swizzling do zawijania wszystkich wywołań metod w klasie z dodatkowymi funkcjami. Konkretnie byłem:NSProxy kontra NSObject
- Sprawdzanie, czy wymagane dla tego obiektu było wywołanie metody w pamięci podręcznej
- Jeśli bufor miał ten przedmiot zwrócić go.
- Jeśli nie, wyślij do oryginalnej implementacji, wypełnij pamięć podręczną i zwróć ją.
Dla każdej metody przekierowałbym do zalecanej metody. I zaimplementuj nową metodę przy użyciu + (BOOL) resolveInstanceMethod: (SEL) sel i IMP_implementationWithBlock.
To działało bez zarzutu, ale kod nie był ładnie czytany. Wygląda na to, że NSProxy zapewni lepszy sposób implementacji tej funkcjonalności.
Ale jeszcze inną alternatywą byłoby po prostu mieć stand-in podklasy NSObject i przechwytywać wywołania metod wokół metod mojego obiektu docelowego. Przez przesłonięcie do przodu Invocation i methodSignatureForSelector, mogę uzyskać wymagany wynik.
Co daje mi NSProxy? Dlaczego powinienem użyć tego zamiast tego?
Czy możesz być bardziej konkretny? W jakich okolicznościach? Zaimplementowałem serwer proxy i działa niezależnie od tego, czy rozszerzam NSProxy, czy nie. –
Spójrz na interfejs 'NSObject'. Żadna z metod tam zdefiniowanych, które nie są zdefiniowane w 'NSProxy' ani nie zostanie nadpisana przez twoją klasę proxy, nie zostanie przekazana. Pamiętaj również o uwzględnieniu wszystkich kategorii w 'NSObject' (tych z implementacjami, a nie nieformalnych protokołach). Jednym z przykładów może być "-classForCoder" i przyjaciele. Co stanie się, jeśli spróbujesz zarchiwizować 'NSString' zawinięty w twoją klasę proxy? –
Ah. . Odniosłem wrażenie, że doszło tylko do wyniku -methodSignatureForSelector –