2010-05-16 16 views
5

Nie mogę znaleźć tej odpowiedzi w dowolnym miejscu. Co to znaczy, gdy w nagłówku metody znajduje się parametr nadawcy? Czy reprezentuje instancję, która go nazwała, lub metodę, która go nazwała?Co to jest nadawca?

Odpowiedz

3

Nie ma żadnej magii. Prawdopodobnie mówisz o metodach powiązanych z niektórymi elementami interfejsu użytkownika przez Interface Builder, prawda?

- (IBAction) userDidPressButton: (id) sender {...} 

IBAction jest makrem, który rozwija się do nieważności. Jest to po prostu syntaktyczny cukier oznaczający metody, które chcesz udostępnić w Konstruktorze interfejsów. Teraz po podłączeniu tej metody do jakiegoś elementu interfejsu, powiedzmy przycisk, IB wywołuje addTarget ... Sposób na przycisk:

[button addTarget:yourObject action:@selector(userDidPressButton:) forEvent:...]; 

A po naciśnięciu przycisku, to przechodzi na liście działań i pożary userDidPressButton, przekazuje się jako pierwszy argument. Prawdopodobnie nie jest to przydatne dla przycisków, ale możesz użyć tego samego mechanizmu, aby uzyskać zmiany w suwaku, iw takim przypadku możesz użyć argumentu nadawcy, aby uzyskać wartość suwaka.

+1

W drugiej połowie odpowiedź obejmuje Cocoa Touch, ale jest niedokładna Kakao, gdzie każda kontrola ma tylko jeden cel i działanie na raz. Jedynymi wyjątkami są NSTableView i NSOutlineView, które wciąż mają tylko jeden cel na wystąpienie, ale mają dwa selektory akcji na instancję (jeden dla kliknięć, drugi dla podwójnych kliknięć). –

+0

Tak, pracuję tylko z Cocoa Touch, dziękuję za wyjaśnienia. – zoul

4

Co to znaczy, gdy w nagłówku metody znajduje się parametr nadawcy? Czy reprezentuje instancję, która go nazwała, lub metodę, która go nazwała?

Sprawdź typ argumentu. Szanse są, to jest id. To jest typ wskaźnika obiektu. Masz rację, że to instancja wysłała wiadomość.

można przekazać selektor wiadomość do wiadomości, ale za to jest typ SEL nie id. Podobnie można przekazać wiadomość implementacji metody, ale jej typ to IMP, a nie id.

Metody, które przyjmują pojedynczy argument sender, to zazwyczaj metody działania, zwykle identyfikowane przez typ zwracany IBAction. Jak powiedział Zoul, IBAction rozwija się do void dla kompilatora, który mówi mu, że metoda nie zwraca wartości. Powodem posiadania IBAction jest to, że Konstruktor interfejsów szuka metod z IBAction jako typu zwracanego i wykrywa je jako akcje, do których można podłączyć kontrolę.

Aby uzyskać więcej informacji o kakao (Mac OS X), zobacz “The Target-Action Mechanism” in the Cocoa Fundamentals Guide i Control and Cell Programming Topics for Cocoa.
Aby uzyskać więcej informacji dotyczących urządzenia Cocoa Touch (iPhone/iPod touch/iPad), patrz “The Target-Action Mechanism” in the UIControl class reference.

1

Oczywiście istnieje wiele technicznych sposobów na opisanie tego, Ale w teorii "nie nie" argument nadawcy, który przekazuje, jest tylko obiektem GUI, który go przekazuje.

Więc jeśli połączysz tę metodę z konkretnym przyciskiem, zadzwonimy do Button1, nadawca to Button1, a wraz z nim wszystkie informacje dostępne dla przycisku. Rozmiar, tekst itp.

mam nadzieję, że to wystarczy.

Bryan