¿Es seguro usar las clases definidas en su propio proyecto dentro de __tributo __ ((constructor)) funciones? ¿El tiempo de ejecución del Object-C tuvo la oportunidad de hacer lo que necesita hacer con sus clases cuando se llaman __attribute __ ((constructor))? ¿O no entiendo cómo el tiempo de ejecución carga las clases y no hay diferencia entre la clase de biblioteca y la suya en este contexto?seguro __tributo __ ((constructor)) clases de función
Respuesta
Sugeriré que use + initialize
o + load
en lugar del atributo, pero esa es mi preferencia.
El método + load
de una clase se invoca cuando la clase está cargada por el tiempo de ejecución.
El método + initialize
de una clase se llama antes que cualquier otro método de la clase.
A partir de los documentos de load
:
En Mac OS X v10.5, el orden de inicialización es el siguiente:
- Todos los inicializadores en cualquier marco que hace referencia.
- Todos + cargar métodos en su imagen.
- Todos los inicializadores estáticos C++ y C/C++ atributo (constructor) funciona en su imagen.
- Todos los inicializadores en marcos que enlacen contigo.
Además:
- método de carga + de una clase se llama después de que todos los métodos de carga + sus superclases.
- Se llama a un método de carga de categoría después del método de carga propio de la clase.
En un método de carga +, puede por lo tanto enviar de manera segura otras clases no relacionadas de la misma imagen, pero es posible que aún no se hayan ejecutado los métodos de + carga en esas clases.
Lo que deja en claro que cualquier método atribuido o + load
se ejecutará después de que se haya inicializado el tiempo de ejecución. Y como + load
es un método en su clase y se ejecuta antes que cualquier método atribuido, entonces antes el tiempo de ejecución debe haber configurado su clase.
+1 buen descubrimiento, CRD! – justin
Esas no son funciones, solo son notaciones de atributos del compilador. No cambiarán el código generado en absoluto.
se usa para decir "llamar a esta función cuando se carga la imagen", y es compatible. la pregunta se relaciona con el orden de inicialización. piénselo de esta manera: * tengo un marco que tiene una función init y algunas clases objc. ¿Puedo usar de forma segura los tipos objc exportados por el framework dentro de la función constructora del framework? ¿se cargarán en el tiempo de ejecución en ese punto? * – justin
- 1. Función constructor vs función declaración
- 2. Hace referencia a la función de constructor
- 3. ¿Es seguro el hilo del constructor estático de C#?
- 4. La última función de limpieza/seguro
- 5. ¿Cómo obtener una función de constructor para heredar de una función de constructor en Javascript?
- 6. usos legítimos del constructor Función
- 7. Haskell - Comparativa constructor sencilla función
- 8. ¿Constructor de sobrecarga para las clases de casos de Scala?
- 9. constructor de copia de base y clases derivadas
- 10. Función de Matlab/historial de clases
- 11. Pasando "esto" a una función desde dentro de un constructor?
- 12. uso se aplican con un constructor función
- 13. Constructor o función init para un objeto
- 14. Función de saludo múltiple de byte seguro() para UTF-8
- 15. C++ stl vector para las clases con copia privada constructor?
- 16. Un constructor para una clase y sus clases anidadas
- 17. No estoy seguro de cómo usar la función jQuery noconflict
- 18. ¿El hilo de la función gettimeofday es seguro en Linux?
- 19. Función lambda para clases en python?
- 20. ¿Cómo devolver diferentes clases desde una función?
- 21. ¿Por qué configurar el constructor del prototipo a su función de constructor?
- 22. simple (con el código) la función hash seguro
- 23. Boost math (función ibeta_inv) ¿no es seguro para subprocesos?
- 24. Inicializando en el Constructor
- 25. Constructor de llamadas como una función en C#
- 26. métodos Fijación al prototipo dentro de la función constructor
- 27. ¿Es un constructor siempre un objeto de función?
- 28. llamando a la función miembro de Javascript constructor
- 29. ¿Es seguro que varios subprocesos invoquen la misma función?
- 30. Constructor llamada
¿Qué has probado? La documentación de GCC dice que este atributo no es actualmente compatible con Objective-C (http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html), y la documentación de Clang parece no mencionar el problema. – CRD
@CRD Los constructores de imágenes se comportan como se esperaba utilizando ambos compiladores distribuidos con Xcode. – justin
@Justin - tanto para documentación ;-) Parece que deberías publicar tu comentario como respuesta. Nathan, ¿por qué quieres usar este atributo en lugar de '+ initialize', que se ejecuta antes de usar una clase? – CRD