Ecco fatto. Perché qualcuno dovrebbe (almeno come API pubblica) un metodo come quello? C'è qualche uso pratico per questo?Qual è lo scopo del metodo self nelle classi conformi a NSObject?
risposta
Il metodo self
è utile per la codifica dei valori-chiave (KVC).
Con KVC, è possibile trattare un oggetto in qualche modo come un dizionario. È possibile accedere a una proprietà dell'oggetto utilizzando una stringa contenente il nome della proprietà, ad esempio: [view valueForKey:@"superview"]
. Si cammina lungo una catena di proprietà utilizzando una stringa contenente un percorso chiave, come questo: [view valueForKeyPath:@"superview.superview.center"]
.
Dal NSObject
ha un metodo self
, è possibile utilizzare self
come il percorso della chiave o il tasto: [view valueForKey:@"self"]
. Quindi, se stai costruendo i tuoi percorsi chiave a livello di programmazione, o leggendoli da un file, usando "self"
come chiave potresti permetterti di evitare di scrivere un caso speciale.
È inoltre possibile utilizzare self
in predicati, come questo:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith \"foo\""];
NSArray *filteredArray = [arrayOfStrings filteredArrayWithPredicate:predicate];
non so se NSPredicate
in realtà utilizza il metodo self
(forse tramite KVC) in questo caso. È certamente possibile.
"SELF" è documentato come costante speciale in NSPredicates, come "nil", "NULL" e un mucchio di altri. Potrebbe essere mappato sull'effettivo metodo di "sé", ma per me la documentazione implica che è speciale. –
Penso che abbia a che fare con il runtime ObjC.
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
Il primo argomento è self. Penso che abbia qualcosa a che fare con quello. In tutta onestà però come sarebbe finire come:
id self(struct id *self, SEL _cmd) {
return self;
}
.... aveva più senso prima che ho iniziato a scrivere questa risposta.
Non sono sicuro del motivo per cui "self" è stato aggiunto in origine, ma una cosa che è stata utile per proteggere i puntatori interni agli oggetti. La raccomandazione ufficiale di Apple era di inserire una chiamata [foo self] dopo aver finito con il puntatore interno; la chiamata al metodo non funziona in modo funzionale, ma assicura che il compilatore continui a giocare fino a quel momento.
- 1. Qual è lo scopo del metodo Thread.SpinWait?
- 2. Qual è lo scopo delle classi astratte?
- 3. scopo dell'interfaccia nelle classi
- 4. Qual è lo scopo del parametro "& rnd =" nelle richieste http?
- 5. C++ Qual è lo scopo del lancio a vuoto?
- 6. Qual è lo scopo di controllare self .__ class__? - python
- 7. Qual è lo scopo del file Manifest
- 8. Qual è lo scopo del metodo attributo-obiettivo?
- 9. Qual è lo scopo del metodo setSelector nella classe NSInvocation?
- 10. Qual è lo scopo del metodo hashcode in java?
- 11. Qual è lo scopo del metodo di autoresizing di UIView?
- 12. Qual è lo scopo dell'utilizzo del metodo moveTaskToBack() in Android?
- 13. Qual è lo scopo del file vshost.exe?
- 14. Qual è lo scopo del parametro -m?
- 15. Qual è lo scopo del controllo VisitorIdentification?
- 16. Qual è lo scopo del trasformatore IdentityT?
- 17. Qual è lo scopo del prototipo?
- 18. Qual è lo scopo del nodo jasmine?
- 19. Qual è lo scopo della chiamata super() nelle sottoclassi TS?
- 20. Qual è lo scopo di. * \\?
- 21. devono essere conformi al protocollo NSObject?
- 22. Qual è lo scopo di JMH @Fork?
- 23. Qual è lo scopo dell'attributo tag NSMenuItem?
- 24. Qual è lo scopo di EXTRA_CFLAGS?
- 25. Qual è lo scopo del passaggio non definito?
- 26. Qual è lo scopo di hidebysig in un metodo MSIL?
- 27. Qual è lo scopo di IApplicationBuilder.New()
- 28. Qual è lo scopo di precompiledApp.config?
- 29. Nell'elaborazione del linguaggio naturale, qual è lo scopo del chunking?
- 30. Qual è lo scopo di HttpHeaders.TryAddWithoutValidation?
Beh, perché no ...? –
La domanda era "Perché qualcuno dovrebbe volere ..." o "Qual è lo scopo ...", non "Perché è lì?" – Matoe
Questa sembra una domanda valida. Perché i downvotes? –