2010-12-01 8 views
6

J'espérais que quelqu'un pourrait me aider à comprendre la syntaxe des blocs lorsqu'ils sont utilisés comme membres d'une classe. J'ai un code qui fonctionne en fait très bien:iOS 4 - L'utilisation de blocs en tant que membre d'une classe

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

@interface StructureListDelegate : NRFCTableDelegate 
{ 
    StructureDeleteCallback _structureDeleteCallback; 
} 

@property (nonatomic, copy) StructureDeleteCallback structureDeleteCallback; 

@end 

Cela fonctionne, mais je voudrais comprendre la syntaxe de l'instruction typedef; et si oui ou non il est réellement nécessaire d'utiliser typedef. Ce que j'ai lu dit qu'il est recommandé d'utiliser typedef dans cette situation car cela rend le code beaucoup plus clair; mais j'ai été incapable de le compiler du tout en essayant de le faire sans typedef. Ma compréhension de typedef était que la syntaxe était essentiellement:

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

Tels que:

typedef double CLLocationDegrees; 

Mais la syntaxe de ma déclaration typedef ne correspond pas. Mes questions sont les suivantes:

  • Comment la syntaxe de ma déclaration typedef si différent des autres typedef déclarations/qu'est-ce que la syntaxe j'utilise signifie réellement au compilateur?
  • Est-il possible de avoir un bloc en tant que membre d'une classe sans utiliser typedef?

Répondre

7

je me suis posé une question sur les lignes de la vôtre ici: Block references as instance vars in Objective-C

Voir mes réponses here et here.

+0

Ah! Je n'ai pas réussi à le faire fonctionner sans utiliser typedef parce que je n'avais pas réalisé que la syntaxe pour définir l'iVar serait complètement différente. Je pensais que je devrais encore avoir [nom de fichier] [iVarName]; – GendoIkari

+0

Donc, juste pour préciser une dernière chose ... que ce soit dans le typedef, ou tout simplement déclarer un bloc, est-il fondamentalement juste que les blocs ont une syntaxe différente pour eux déclarant que d'autres types faire? Le compilateur voit juste le symbole^et sait que le nom de la variable est après le ^, par opposition à après le nom du type comme il est avec int x ;? Merci! – GendoIkari

+0

@Gendolkari Vous l'avez! :) –

Questions connexes