Po co są selektory, czemu mają służy, skoro to:
Można krócej zapisaćKod:SEL selektor=@(addObject:); //pomijam sprawdzanie czy dany obiekt może obsłużyć selektor [array performSelector: selektor withObject:obiekt
Kod:[array adObject:obiekt];
Po co są selektory, czemu mają służy, skoro to:
Można krócej zapisaćKod:SEL selektor=@(addObject:); //pomijam sprawdzanie czy dany obiekt może obsłużyć selektor [array performSelector: selektor withObject:obiekt
Kod:[array adObject:obiekt];
Komputer: MacBook alu 13,3' 2,4 GHz
Telefon: iPhone 4s
żeby to było dynamiczne po prostu.
jak zakodzisz to wprost to faktycznie nic ci nie daje.
ale jeżeli to co jest selektorem jest zmienną, to daje ci to wiele możliwości.
jak np. metodęw NSThreadKod:- (id)initWithTarget:(id)target selector:(SEL)selector object:(id)argument
nie wiem do końca jak sobie byś wyobrażał stworzenie czegoś takiego bez SEL. to jest główna idea tego.
Dzięki temu możesz też sprawdzić czy dany obiekt obsługuje daną metodę (respondsToSelectorSEL)selector). Co jest przydatne np. w przypadku delegatów (w końcu niektóre metody mogą być opcjonalne w protokole, a wywołanie jej na obiekcie który jej nie obsługuje wywaliłoby program)
Ostatnio edytowane przez Roberto ; 11.06.2011 o 09:44
Komputer: MacBook Pro 13,3" 2,26GHz (Lion 10.7.3)
Telefon: iPhone 4S
Tablet: iPad 2 3G
dlaczego nie korzystasz z opcji szukaj?
http://ifiboughtyourappalreadycaniup...acappstore.com
Tak jak Roberto napisal - wyobraz sobie ze twoj obiekt dostaje selektor jako parametr metody i musi sprawdzic czy inny nalezacy do niego obiekt lub grupa obiektow go obsluguje a jezeli tak to go wykonac. Nie mozesz wtedy statycznie wpisac wywolania metody bo jej tak naprawde nie znasz. Dodatkowo zrobiles literowke w nazwie metody w drugim przykladzie - uzywajac selektora unikasz sytuacji gdzie przypadkiem, przez literowke, wywolasz inna metode niz ta ktorej istnienie sprawdzales. Jako ze selektor i tak potrzebny jest ci do sprawdzenia czy metoda jest obslugiwana przez obiekt to niewiele wiecej kosztuje ponoene jego wykorzystanie.
Ostatnio edytowane przez ClassicGOD ; 11.06.2011 o 15:53
Komputer: MacBook Pro 15" (mid 2010) Core i5 2.4GHz/8GB/120GB SSD/1TB HDD/Hi-Res
Telefon: iPhone 4 32GB oraz Samsung Galaxy S i9000
"We notice things that don't work. We don't notice things that do."