Ho una classe che utilizza resolveInstanceMethod
per implementare i metodi in modo dinamico. Quando chiamo i metodi implementati dinamicamente da altre parti del codice, il compilatore emette un avviso che l'oggetto potrebbe non rispondere al selettore. Vorrei che il compilatore non emettesse tali avvertimenti per questa classe, ma non voglio sopprimere gli avvertimenti quando invoco un selettore non valido su altre classi. È possibile?Come posso dire al compilatore che la mia classe risolve i metodi in modo dinamico?
risposta
Supponendo che conoscete le firme dei metodi che saranno risolti in modo dinamico in fase di compilazione, è possibile dichiarare 'em in una categoria informale:
@interface MyDynamicallyResolvingClass(MethodsThatWillResolveAtRuntime)
... declare the methods here ...
@end
Non c'è bisogno di fornire un'implementazione.
Se non si conoscono le firme - se anche i nomi dei metodi sono dinamici - allora è necessario utilizzare sia -performSelector:
(o le varianti di argomento oggetto singolo o doppio) o è probabile che si desideri utilizzare NSInvocazione, a meno che la prestazione non sia una preoccupazione importante (se lo è, esistono soluzioni alternative che sono significativamente più laboriose).
Usa performSelector:
E 'equivalente ad inviare un messaggio direttamente al ricevitore, tuttavia, consente di inviare messaggi che non sono determinati fino al runtime.
Se i metodi di prendere uno o due argomenti, è possibile utilizzare le sorelle di questo metodo: – performSelector:withObject:
e – performSelector:withObject:withObject:
Se i metodi hanno più di due argomenti, o argomenti che non sono di tipo di oggetto, questa risposta è non adattato.
- 1. Come posso ottimizzare questa classe che risolve questa sequenza matematica
- 2. Come posso impostare il nome della classe in modo dinamico?
- 3. In che modo Orchard risolve i riferimenti nei moduli?
- 4. Come aggiungere un frammento nella mia attività in modo dinamico?
- 5. In che modo Aurelia può visualizzare la mia vista dopo aver aggiunto in modo dinamico un elemento personalizzato al DOM?
- 6. Come posso dire al compilatore di ignorare un metodo nelle tracce dello stack?
- 7. In che modo ping risolve l'indirizzo IP?
- 8. Posso dire al compilatore Closure, solo per determinati tipi, di interrompere la ridenominazione delle proprietà?
- 9. In che modo il compilatore risolve internamente il problema dei diamanti in C++?
- 10. Come posso fare in modo che la mia applicazione di console riceva i messaggi della finestra?
- 11. come posso elencare-inizializzare la mia classe?
- 12. PHP - Zend dire evitare i metodi magici?
- 13. Come creare oggetti ed i suoi metodi in modo dinamico in Ruby come in Javascript?
- 14. Come posso caricare una parte della mia app C# in modo dinamico senza riavvio dell'app?
- 15. Come posso contrassegnare i metodi creati con `reify` con ^: export, in modo che il compilatore Closure non li rinomini?
- 16. Come posso utilizzare la mia classe esterna in CakePHP 3.0?
- 17. Come posso prendere in giro i metodi della classe @InjectMocks?
- 18. Java Swing: cambia la locale in modo dinamico al runtime
- 19. C'è un modo compatto per dire al compilatore C# di usare l'operatore di base e ==?
- 20. Come posso dire che la mia app sta per diventare inattiva/andare allo stato di background?
- 21. Delegare i metodi di istanza al metodo di classe
- 22. C'è un modo per proibire la sottoclasse della mia classe?
- 23. Come posso dire al compilatore di non creare un oggetto temporaneo?
- 24. Come posso aggiornare/aggiornare gli elementi di Google MDL che aggiungo alla mia pagina in modo dinamico?
- 25. Metodi definiti al di fuori della classe?
- 26. L'ordine delle dichiarazioni dei metodi in una classe importa al compilatore?
- 27. C'è un modo per far sì che la mia funzione restituisca un array dinamico?
- 28. Come passare i metodi migliori in metodi della stessa classe
- 29. In che modo "Typemock Isolator" simula i metodi statici?
- 30. Come dire a TextMate di ignorare la mia cartella Bundler di Katz in "Vai al file"?
Un protocollo informale risolve perfettamente il mio problema. –