È sicuro utilizzare le classi definite nel proprio progetto all'interno delle funzioni __attribute __ ((costruttore)? Il runtime obiettivo-C ha avuto la possibilità di fare ciò che è necessario fare con le classi quando vengono chiamate le funzioni __attribute __ ((costruttore)? Oppure sto fraintendendo il modo in cui il runtime carica le classi e non c'è differenza tra la classe della libreria e la tua in questo contesto?classi di funzioni __attribute __ ((costruttore) sicure
risposta
Ti suggerisco di utilizzare + initialize
o + load
anziché l'attributo, ma questa è la mia preferenza.
Il metodo + load
di una classe viene chiamato quando la classe viene caricata dal runtime.
Il metodo + initialize
di una classe viene chiamato prima di qualsiasi altro metodo nella classe.
Dalla documentazione per load
:
In Mac OS X v10.5, l'ordine di inizializzazione è la seguente:
- Tutti initializers in ogni quadro si collega a.
- Tutto + caricare i metodi nell'immagine.
- Tutti gli inizializzatori statici C++ e C/C++ attributo (costruttore) funzioni nell'immagine.
- Tutti gli inizializzatori in framework che si collegano all'utente.
Inoltre:
- metodo load + di una classe viene chiamato dopo che tutti i metodi di carico + sue superclassi.
- Un metodo di carico di categoria + viene chiamato dopo il metodo di caricamento + della classe.
In un metodo di caricamento +, è possibile quindi inviare messaggi in modo sicuro ad altre classi non correlate dalla stessa immagine, ma eventuali metodi di caricamento + su tali classi potrebbero non essere ancora stati eseguiti.
Ciò rende evidente qualsiasi metodo attribuito o + load
eseguito dopo l'inizializzazione del runtime. E come + load
è un metodo sulla tua classe ed è eseguito prima di qualsiasi metodo attribuito prima che il runtime abbia impostato la tua classe.
+1 buona scoperta, CRD! – justin
Queste non sono funzioni, sono solo notazioni degli attributi del compilatore. Non cambieranno affatto il codice generato.
è usato per dire "chiama questa funzione quando l'immagine è caricata" ed è supportato. la domanda riguarda l'ordine di inizializzazione. pensa in questo modo: * Ho un framework che ha una funzione init e alcune classi objc. posso usare tranquillamente i tipi objc esportati dal framework all'interno della funzione di costruzione del framework? saranno caricati nel runtime da quel punto? * – justin
- 1. Esiste un equivalente Swift a GCC `__attribute __ ((costruttore))`?
- 2. ffmpeg: quali funzioni sono multithreading sicure?
- 3. Perché __attribute __ ((costruttore)) non funziona in una libreria statica?
- 4. C++ vs __attribute __ ((constructor))
- 5. Costruttore di classi multiple Matlab
- 6. Funzioni di stubazione o classi
- 7. È sicuro utilizzare le funzioni thread "non sicure"?
- 8. Come rendere sicure queste funzioni digitate in modo dinamico?
- 9. Le funzioni membro del thread std :: wstring_convert sono sicure?
- 10. __attribute __ ((const)) rispetto __attribute __ ((puro)) in GNU C
- 11. costruttore di copia delle classi multiply-ereditate
- 12. Java: inizializzazione e costruttore di classi anonime
- 13. Costruttore di classi statiche in VB
- 14. Funzioni membro di chiamata F # nel costruttore
- 15. __attribute __ ((sezione ("nome"))) utilizzo?
- 16. Tipi anonimi (funzioni per classi)
- 17. Clion: funzioni di documentazione automatica, classi
- 18. Funzioni all'interno del costruttore vs prototipo
- 19. Maniglie più sicure in Haskell?
- 20. __attribute __ ((formato (printf, 1, 2))) per MSVC?
- 21. Swift equivalente a __attribute ((objc_requires_super))?
- 22. Chiamare le funzioni membro da un costruttore
- 23. Funzioni/variabili statiche vs classi nelle classi Swift?
- 24. Come ottenere l'istanza Microsoft.AspNet.HttpHttpContext in Costruttore di classi utilizzando DI
- 25. Quanto sono sicure le funzioni native di php da utilizzare con l'input non filtrato?
- 26. Fudging la linea tra classi e funzioni
- 27. Sphinx - Moduli, classi e funzioni Python Documentazione
- 28. Classi l'analisi, Funzioni e argomenti in PHP
- 29. Come implementare il costruttore di classi in Visual Basic?
- 30. JvmNota per caricare annotazioni per il costruttore di classi primarie
Cosa hai provato? La documentazione GCC dice che questo attributo non è attualmente supportato per Objective-C (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html), e la documentazione di Clang sembra essere silenziosa sul problema. – CRD
@CRD I costruttori di immagini si comportano come previsto utilizzando entrambi i compilatori distribuiti con Xcode. – justin
@Justin - così tanto per la documentazione ;-) Sembra che dovresti pubblicare il tuo commento come risposta. Nathan, perché vuoi usare questo attributo piuttosto che '+ initialize', che viene eseguito prima dell'uso di una classe? – CRD