2011-03-22 15 views
6

he estado desarrollando para el iPhone desde los últimos 1-2 meses y todo el tiempo para tomar IBOutlet utilizo el siguiente método para declarar cualquier propiedad:iPhone XCode propiedad automática, sintetizar y delloc

En .h:

@interface .... 
{ 
    controlType varName; 
} 

@property() IBOutlet controlType varName; 

en los archivos .m:

en la parte superior -

@synthesize varName;

in delloc method - [varName release];

Aunque el método es bueno, pero no es muy bueno cuando su pareja o tomar una f minutos solo por declarar la propiedad.

¿Hay algún proceso automático para declarar propiedades, IBOutlets, IBActions o variables de datos básicos.

Espero que haya algunos métodos automáticos para este escenario, ya que este es un proceso muy básico.

Gracias a todos.

+0

se le olvidó la 'self.varName = nil;?' En viewDidUnload ;-) –

+0

nunca hacerlo .. :( que no se enfrentan a ningún problema, pero lo que hace este self.varName = nil hacer – necixy

Respuesta

4

De hecho, sí!

Ya no es necesario declarar el iVar real.

En resumen, simplemente omita esta parte: controlType varName;

Por ahora, todavía tiene que "sintetizar" explícitamente.

(Por lo que yo puedo ver, podrían posiblemente automatizar que en el futuro. Pero por ahora hay que "sintetizar" para crear el setter y getter.)

Usted todavía tiene que liberar la memoria - Realmente no hay forma de que se pueda automatizar, ya que el manejo de la memoria es "una verdadera programación de He-Man".

Para cualquier nueva lectura de amigos, no se olvide del "sí mismo". parte cuando se usa la propiedad.

Además tenga en cuenta que XCode4 incluso tiene una nueva característica automática. Simplemente arrastre desde el constructor de interfaz, a su archivo .h, y lo hará todo por usted, ¡pruébelo!


En respuesta a su pregunta suplementaria: Una IBOutlet NO tienen necesidad particular de una propiedad - sólo se puede utilizar una Ivar barato normal. Por otro lado, si lo desea, puede usar una propiedad. Además: incluso puedes usar el nuevo truco (2011) de no molestarte en declarar el ivar, solo usa la declaración de propiedad, ¡y coloca un IBOutlet ahí!

+0

Gracias amigo, Una cosa más viene en mi mente es que ¿cuál es la diferencia entre propiedades y variables de clase? ¿En qué se diferencian? ¿Necesitamos declarar propiedad para cada IBOutlet o cualquier miembro de datos como un array? – necixy

0

Puede ahorrarse tener que liberar el objeto cambiando la declaración de propiedad. Si usa:

@property (assign) IBOutlet controlType varName; 

retener no se llamará en su vista por lo que no tendrá que soltarlo más tarde. Esto generalmente es seguro ya que las vistas se conservan cuando se agregan a un elemento principal. Si elimina las vistas de sus padres por alguna razón, deberá retenerlas.

+0

Encuentro que es bastante raro para mí eliminar las vistas que se crean en IB. Por lo general, simplemente configuro las vistas como ocultas en lugar de eliminarlas y tener que volver a agregarlas. Además, si olvida algo, generalmente se producirá un bloqueo. como op posado a una fuga que me resulta más fácil de tratar. – skorulis

+0

Esto suena como un mal hábito para entrar si está haciendo un desarrollo colaborativo. Prefiero la nueva característica en XCode 4.x y espero que Apple continúe mejorando las herramientas para competir con Eclipse, InteliJ, etc. – mobibob

0

Here's script xcode para automatizar el tedio de declarar propiedades.

+0

Esto no funcionará en Xcode 4 –

8

Otra que no mucha gente conoce es que puede arrastrar desde el Interface Builder al archivo de encabezado para crear IBActions o IBOutlet.

NOTA: Abra el Editor asistente con foco en el XIB dentro de IB.

Si crea sus IBOutlet de esta manera, Xcode agrega automáticamente la propiedad, la sintetiza, la define como nula en viewDidUnload y la libera en dealloc.

Simplemente arrastre desde el objeto IB al archivo de encabezado de la misma manera que lo haría al crear conexiones entre los objetos de vista y sus propietarios de archivos (captura de pantalla a continuación). enter image description here

+0

¿Funciona esto antes de XCode 4.0? – necixy

+0

No funciona para mi XCode 3.2.3. :( – necixy

2

Hay una herramienta impresionante que acelera todo el proceso: accessorizer.

Escribe controlType varName; selecciónelo y presione algunos botones y el accesorio creará la propiedad, init, dealloc, viewDidUnload y mucho más para usted. Solo tienes que pegar el código en tu proyecto.

Pruébalo, una demostración está disponible.

+0

Gracias por señalar esta gran herramienta En mi opinión, esta debería ser la respuesta. –

Cuestiones relacionadas