2009-11-19 5 views
2

J'ai gravi la courbe d'apprentissage du code X pendant environ deux mois maintenant. Je comprends le but des directives @ property/@ synthesize, mais il semble qu'il soit un peu redondant de toujours déclarer les propriétés dans le fichier .h, puis de les synthétiser dans le fichier .m.@property et @synthesize: pourquoi les deux?

Pourquoi le compilateur a-t-il besoin des deux directives? Si elles sont toujours utilisées ensemble, aucune n'est techniquement redondante?

Merci d'avance pour toute idée sur ce sujet.

John Doner

+0

La langue est "Objective-C", l'IDE est "Xcode". –

Répondre

0

Eh bien, vous ne pouvez pas utiliser @synthesize dans les implémentations de catégorie, de sorte que peut-être une raison.

1

C'est pour que vous puissiez partager l'implémentation et la déclaration. Ça me semble plutôt bien.

3

Le mot clé @property (...) foo est utilisé dans votre définition de classe. Vous n'avez pas besoin d'utiliser le mot-clé @synthesize dans le fichier d'implémentation si vous fournissez getters/setters approprié.

Exemple:

@property int SomeInt; 

--- 

-(int)SomeInt { 
    return _someInt; 
} 

-(void)setSomeInt:(int)newValue { 
    _someInt = newValue; 
} 

Ou vous pouvez utiliser @synthesize foo pour informer le compilateur de générer getters/setters pour vous ou @dynamic d'informer le compilateur que ces méthodes seront disponibles lors de l'exécution - à la fois dans le fichier de mise en œuvre.

Il y a en réalité plus de magie derrière les propriétés dans Objective-C, read up on them at Apple Reference Library.

+1

ni @dynamic, ni @synthesize ne sont cependant requis. Tant que le getter/setter est dans @implementation –

+0

Jason Harwig: "Vous n'avez pas besoin d'utiliser le mot-clé @synthesize dans le fichier d'implémentation si vous fournissez des getters/setters appropriés Exemple:" ... :) – arul