2009-02-27 2 views
14

¿Puede alguien explicar de una manera humanamente comprensible qué es un "Outlet"?¿Qué describe mejor a un "Outlet" en el objetivo-c/Cocoa?

+0

¿Qué quiere decir con "de una (sic) forma humanamente comprensible?" ¿Qué parte tienes problemas para entender? ¿Cuál es tu pasado? cuás es tu pensamiento? Estos son importantes para declarar desde el principio al hacer una pregunta. –

+0

Todo lo que se puede arrastrar desde el constructor de interfaces (IBOutlet's). –

Respuesta

10

acabo de pensar en él como un puntero a un control de interfaz de usuario. Una vez que hice esa conexión mental en mi mente, tenía sentido.

+9

No necesariamente. También podría ser un NSController o un delegado. El puntero a otro objeto es más preciso. –

5

Yo diría que son el puente que conecta los objetos de la interfaz de usuario con el código que los usa. Como su nombre indica, proporcionan un lugar para "conectar" su UI a su código.

26

Es una variable de instancia que aparece en Interface Builder, de modo que puede usar IB para conectar otro objeto a la toma de corriente.

Cuando carga el plumín, el sistema de carga de plumillas hará la magia necesaria para asegurarse de que aparezca el objeto correcto en cada salida.

Editar: Tenía la intención de escribir una publicación completa en el blog alrededor de esta imagen (cambié de opinión después de terminar la imagen), pero incluso solo, debería ayudar a aclarar los puntos de venta para las personas. Aquí van:

The outlet relationship. http://boredzo.org/images/The-outlet-relationship-small.png

+0

+1 ¿Qué herramienta de dibujo usaste? –

+0

Yar: Lineform. http://freeverse.com/lineform/ –

+0

¿Qué sucede si A necesita saber acerca de B, y A es un objeto creado dinámicamente (NSOperation por ejemplo) y B es el ApplicationController? – Vassilis

3

IBOutlet es un símbolo que indica al Interface Builder que una variable de instancia de objeto declararse no como

IBOutlet id ivar_name; 

debe ser presentado como una salida de una instancia de la clase asociada. Esto le permite conectar objetos de forma gráfica en Interface Builder de forma tal que, después de cargar el NIB (es decir, cuando se envía un mensaje -awakeFromNib), el valor de ivar_name sea un puntero al objeto que seleccionó como el valor del outlet en Interface Builder .

Desde el punto de vista del lenguaje Objective-C, IBOutlet no significa nada.

+0

Entonces, el propósito de una variable 'IBOutlet' es señalar una variable de instancia a un objeto GUI en un archivo' nib' (de modo que tengamos acceso programático a un elemento que no codificamos explícitamente pero que fue asignado en la UI arrastrándolo), que podría haber obviado si no usamos Interface Builder y recurrimos a escribir código GUI nosotros mismos, ¿correcto? – SexyBeast

11

Desde un punto de vista de código e IBOutlet es solo una sugerencia para Interface Builder. En realidad es una macro que compila, bueno, nada en absoluto. Es decir, el compilador elimina completamente al compilar.

Pero Interface Builder puede escanear su código de IBOutlet para que al hacer clic derecho sobre un objeto en IB pueda ver todas las salidas que podría conectar a otros objetos.

alt text http://img27.imageshack.us/img27/5512/picture820090228.png

En este ejemplo, delegado es una variable miembro de UIApplication y es un IBOutlet también.

5

palabra clave El IBOutlet se define así:

#ifndef IBOutlet 
#define IBOutlet 
#endif 

IBOutlet no hace absolutamente nada en lo que se refiere al compilador. Su único propósito es actuar como una sugerencia para decirle a Interface Builder que esta es una variable de instancia que estamos yendo a conectar a un objeto en un plumín. Cualquier variable de instancia que cree y desee conectarse a un objeto en un archivo nib debe ir precedida de la palabra clave IBOutlet.

0

Una salida es una variable de instancia en su código (en X-code) a la que se le puede asignar una referencia a un objeto de interfaz de usuario (en Interface Builder). Usted conecta el objeto de interfaz de usuario en la variable de instancia.La asignación se especifica en el archivo NIB creado por Interface Builder.

+0

Puede intentar leer las otras respuestas sobre esta pregunta. Y no, los puntos de venta son unidireccionales. –

+0

También: No, Objective-C no usa una máquina virtual. No, no hay un examen periódico de las variables de salida de cada instancia (tal exploración no tiene sentido ya que las salidas son unidireccionales, y tendrían muy poco sentido incluso si fueran bidireccionales). El sistema no es tan complejo como crees que es. Realmente necesita leer la documentación: http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/IB_UserGuide/ http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ LoadingResources / –

Cuestiones relacionadas