2010-09-17 6 views
3

je remarque que vous pouvez 'double déclarer' une variable de cette façon:Propriétés et déclaration d'instance variables

@interface A { 
    NSString *instanceVariable; 
} 
@property (nonatomic, retain) NSString *instanceVariable; 
@end 

Cela a le même effet que il suffit de faire:

@interface A { 
} 
@property (nonatomic, retain) NSString *instanceVariable; 
@end 

Pourquoi pas le compilateur se plaindre dans des situations comme celle-ci?

Répondre

7

Parce que les deux méthodes sont valides.

Déclarant Ivar via simplement déclarer une propriété car il est une nouvelle langue caractéristique disponible à partir objc 2.0

Dans la section "Run-time differences" de référence "langage de programmation Objective-c" a déclaré:

Pour @synthesize à travailler dans l'ancien runtime, vous devez soit fournir une variable d'instance du même nom et le type compatible de la propriété ou spécifier une autre instance existante variable dans le @synthesize st atement. Avec l'environnement d'exécution moderne, si vous ne fournissez pas une variable d'instance , le compilateur en ajoute un pour vous.

+0

... essayer de trouver une preuve d'épreuve pendant ce temps :) – Vladimir

+1

Voir par ex. [ici] (http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html#//apple_ref/doc/uid/TP30001163-CH17-SW9) ... * "Pour les runtimes modernes [...], les variables d'instance sont synthétisées si nécessaire.Si une variable d'instance du même nom existe déjà, elle est utilisée." * –

+0

Merci pour vos réponses. –

Questions connexes