2010-12-01 19 views
6

Esperaba que alguien me ayudara a entender la sintaxis de los bloques cuando se usaban como miembros de una clase. Tengo un código que realmente funciona muy bien:iOS 4 - Uso de bloques como miembro de una clase

@class Structure; 
typedef void (^StructureDeleteCallback)(Structure *); 

@interface StructureListDelegate : NRFCTableDelegate 
{ 
    StructureDeleteCallback _structureDeleteCallback; 
} 

@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback; 

@end 

Esto funciona, pero me gustaría entender la sintaxis de la instrucción typedef; y si realmente se requiere o no usar typedef.

Lo que he leído dice que usar typedef en esta situación es recomendable porque hace que el código sea mucho más claro; pero no he podido compilarlo al intentar hacer esto sin typedef. Mi comprensión de typedef fue que la sintaxis era básicamente:

typedef [actual type] [new name for type]; 

Tales como:

typedef double CLLocationDegrees; 

Pero la sintaxis de mi declaración typedef no coincide con esto. Así que mis preguntas son:

  • ¿Cómo puede la sintaxis de mi declaración typedef ser tan diferente de otros typedef declaraciones/qué hace la sintaxis que estoy usando en realidad significa que el compilador?
  • ¿Es posible tener un bloque como miembro de una clase sin usar typedef?

Respuesta

7

Yo mismo he hecho una pregunta en la línea de la tuya aquí: Block references as instance vars in Objective-C

Ver mis respuestas here y here.

+0

¡Ah! No pude hacerlo funcionar sin usar typedef porque no me di cuenta de que la sintaxis para definir el iVar sería completamente diferente. Pensé que todavía tendría que tener [typename] [iVarName]; – GendoIkari

+0

Así que solo para aclarar una última cosa ... ya sea en el typedef, o simplemente declarando un bloque, ¿Básicamente es simplemente que los bloques tienen una sintaxis diferente para declararlos que otros tipos? El compilador acaba de ver el símbolo^y sabe que el nombre de la variable está después del ^, en lugar de después del nombre del tipo como está con int x ;? ¡Gracias! – GendoIkari

+0

@Gendolkari ¡Lo tienes! :) –

Cuestiones relacionadas