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
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.
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.
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
- 1. Co jest programowym przeciwieństwem programu showViewController: nadawca:
- 2. Co to jest Serializable? Co to znaczy?
- 3. Co to jest "usuń to"?
- 4. Co to jest Pagel?
- 5. Co to jest _GLOBAL_OFFSET_TABLE?
- 6. Co to jest "android.R.layout.simple_list_item_1"?
- 7. Co to jest DetailsView.EnableModelValidation?
- 8. Co to jest NSPathStore2?
- 9. Co to jest czasownik = "*"?
- 10. Co to jest Postgresql_psycopg2?
- 11. Co to jest ?
- 12. co to jest .netrwhist?
- 13. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 14. Co to jest CGVector?
- 15. Co to jest $ {project.licensePath}?
- 16. co to jest alloc.h?
- 17. Co to jest PurpleEventCallback?
- 18. Co to jest global ::?
- 19. Co to jest? rodzaj?
- 20. Co to jest __meteor_bootstrap__?
- 21. Co to jest NuGetPackageImportStamp?
- 22. Co to jest LazyList?
- 23. Co to jest IllegalStateException?
- 24. Co to jest "loadall.so"?
- 25. Co to jest ws: //?
- 26. Co to jest DNVM?
- 27. Co to jest kthreadd_task
- 28. Co to jest AppDomain?
- 29. Co to jest klabject?
- 30. Co to jest UIViewController
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ęć). –
Tak, pracuję tylko z Cocoa Touch, dziękuję za wyjaśnienia. – zoul