2011-01-10 1 views
2

Je définir une variable dans la méthode d'interface de .h comme ça ...Quelle est la différence dans la définition d'une variable dans la méthode interface() du fichier .h seul sans la synthétiser?

@interface ......{ 
    int a; 
} 

Puis-je l'utiliser dans le fichier .m, il fonctionne très bien ....

i également modifié le code comme

@interface ......{ 
    int a; 
} 
@property(nonatomic) int a; 

dans le fichier .h, et dans le fichier .m i régler la valeur d'int comme

@synthesize a; 

Maintenant aussi ça marche bien ...

Quelle est la différence entre les deux cas?

+0

Quelle langue/plateforme est-ce? – leppie

+0

Ceci est l'objectif-C. Ré-enregistrement – cHao

+2

duplication possible de [Quelle est la différence dans la définition d'une variable dans la méthode interface() du fichier .h seul sans le synthétiser?] (Http://stackoverflow.com/questions/4643692/what-is-the-difference-in- define-a-variable-in-h-files-interface-method-alo) – Vladimir

Répondre

1

En déclarant votre « une » propriété que vous autorisez pour l'int à stocker dans votre classe et vous pouvez y accéder à partir de votre classe - mais seulement dans votre classe. Si vous voulez que ce soit une propriété accessible par d'autres objets (une propriété publique), vous avez besoin de méthodes getter et setter.

En déclarant comme un @property dans votre .h et en utilisant @synthesize dans votre .m, vous créez automatiquement deux méthodes:

[myObject a]; // your getter 
[myObject setA:50]; // your setter 

Une chose à garder à l'esprit est ici qu'il est souvent une très bonne idée utiliser des propriétés synthétiques, même dans votre classe, car ils prendront soin de votre gestion de la mémoire. Par exemple, lorsque vous marquez la @property comme retain:

objectProperty = anObject; // just accessing locally, no memory management 
self.objectProperty = anObject; // [anObject retain] will be called 
self.objectProperty = nil; // [anObject release] will be called 
+1

... et n'oubliez pas que myObject.a = 50 est un raccourci pour '[myObject setA: 50]'. Le compilateur traite les deux à l'identique. Idem pour 'myObject.a' et' [myObject a] '. –

0

Si vous définissez et synthétisez une propriété, vous pouvez également accéder à la valeur à l'aide de int value = self.a; self.a = newValue;. Cela rend également la variable accessible à d'autres objets. Sans la propriété, vous ne pouvez pas utiliser le self. pour accéder à la variable et il n'y a aucun moyen automatique pour que d'autres objets y accèdent.

0

Lorsque vous définissez et synthétisez une propriété, vous dites au compilateur de générer les méthodes ivar et accessor (- (int) a et - (void) setA: (int) a_;) pour cela. Ces méthodes peuvent être appelées explicitement ou implicitement en utilisant la syntaxe à point:

self.a = num; // [self setA:num] gets called 
2

En premier cas, vous utilisez le champ, avec accès direct à elle. Dans le second cas, vous définissez la propriété Objective C avec des accesseurs.

Questions connexes