Esta pregunta es por pura curiosidad. ¿Cómo define Cocoa el tipo de identificación? ¿Es solo un typedef para un vacío *? Además, si sabe en qué archivo de encabezado está definido, me interesaría echarle un vistazo.En Cocoa, ¿cómo se define el tipo de id?
Respuesta
Mantenga presionada la tecla de comando y haga doble clic en cualquier término resaltado para ir a su definición.
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
typedef struct objc_selector *SEL;
typedef id (*IMP)(id, SEL, ...);
en objc.h
typedef struct objc_class *Class;
typedef struct objc_object {
Class isa;
} *id;
Para averiguar por su cuenta, en XCode, haga clic derecho Identificación - o cualquier otro tipo - y seleccione Cambiar a definición. Es interesante notar las similitudes con otros sistemas de objetos basados en C/C++; un puntero de objeto - un id - apunta a una estructura que comienza con un punto a información de clase compartida. Tengo muchas implementaciones de C++, esa sería la tabla de funciones virtuales, como lo sería con COM de Microsoft. En Cocoa, los detalles de objc_class no se nos revelan en el archivo de encabezado.
El tipo id
se declara generalmente como:
typedef struct objc_object *id;
Este es crítico para Objective-C++ donde el tipo es parte de un nombre de función despedazado.
Puede echar un vistazo en /usr/include/objc/objc.h
Se declararse no en /usr/include/objc/objc.h
(en Leopard) de la siguiente manera:
typedef struct objc_object {
Class isa;
} *id;
que significa que no es en void *
todo, sino más bien un puntero a una estructura que contiene un único miembro, apuntando a la definición de la clase. Interesante de hecho.
Recuerdo cuando estaba entrando en C y aprendí que Objective-C se implementó inicialmente como una capa de preprocesador encima de C. Ya no es así.
La mejor lectura sobre el tema que he encontrado:
Se puede hacer referencia al documento aquí: http://opensource.apple.com/source/objc4/objc4-437/runtime/objc.h Esperamos que esto hacer un favor a usted
- 1. ¿Cómo se define el tipo de dinero en F #
- 2. Obtener el tipo de archivo en Cocoa
- 3. ¿Cómo se define un tipo para una función en Scala?
- 4. ¿Cómo se define un tipo de interfaz de iterador?
- 5. Determinar dónde se define un tipo
- 6. ¿Cómo se define una definición de tipo cíclico?
- 7. ¿Cómo se define (?) Internamente?
- 8. Tipo de archivo miseria - Cocoa
- 9. ¿Cómo se define threadsafe?
- 10. ¿Cómo se usa #define?
- 11. ¿Cómo se define parcelable del tipo de interfaz en el archivo .aidl?
- 12. ¿Cómo se define correctamente PRINT_NOTIFY_INFO_DATA?
- 13. ¿Cómo se define el tipo de escala para ninguna función de argumento?
- 14. ¿Cómo se define la constante en el constructor de clase?
- 15. El tipo 'System.IDisposable' se define en un ensamblaje al que no se hace referencia
- 16. CS0012: el tipo 'System.Data.Linq.DataContext' se define en una asamblea que no se hace referencia
- 17. ¿Cómo se define un párrafo en un NSAttributedString?
- 18. ¿Cómo se define el límite de tipo genérico para los tipos primitivos?
- 19. ¿Cómo se define un pedido en Scala?
- 20. ¿Cómo se define ESC char en git?
- 21. ¿Cómo se define enum en as3?
- 22. Error extraño - CS0012: El tipo x se define en un ensamblaje que no está referenciado
- 23. ¿Cómo se define la función en .emacs?
- 24. ¿Cómo se define una @interface en Scala?
- 25. ¿Cómo se define una definición en C?
- 26. ¿Cómo se define la constante de miembro de tipo en F #?
- 27. ¿Cómo se limpia el caché WebView en Cocoa?
- 28. ¿Cómo puedo obtener el CollectionView que se define en XAML
- 29. ¿Cómo se define el contenido del mapa en la inicialización?
- 30. ¿Cómo se define el operador explícito en F #?
+1 cmd + doble click es maravillosamente útil! –
+1 Gran respuesta. Espero trabajar más con XCode en el próximo año, y el atajo de teclado será muy útil para saberlo. –
+1 sobre mi propia respuesta. Ya lo sabía, pero es demasiado útil. – Mike