Y a-t-il une différence entre une "variable d'instance" et une "propriété" en Objective-c ?
Je ne suis pas très sûr de ça. Je pense qu'une "propriété" est une variable d'instance qui possède des méthodes d'accès, mais je peux me tromper.
Y a-t-il une différence entre une "variable d'instance" et une "propriété" en Objective-c ?
Je ne suis pas très sûr de ça. Je pense qu'une "propriété" est une variable d'instance qui possède des méthodes d'accès, mais je peux me tromper.
Objective-C : propriété et variable d'instance (iVar)
[variable Swift, propriété...]
Variable d'instance
@interface SomeClass: NSObject
NSString *someVariable;
@end
Propriété
@interface SomeClass: NSObject
@property (nonatomic, strong) NSString *someVariable;
@end
Property
utilise Instance variable
à l'intérieur. property = variable + bounded getter/setter
. Il s'agit d'un appel de méthode avec une syntaxe et un accès variables.
@property
génère getter
y setter
méthodes (méthodes d'accès) qui utilise backing ivar
(alias backing field) que vous pouvez utiliser via l'underscore _<var_name>
( _someVariable
).
Puisqu'il appelle une méthode - method dispatch
est utilisé, c'est pourquoi KVO
[À propos] peut être appliqué
Lorsque vous surchargez les méthodes d'accès, l'iVar de retour n'est pas générée. C'est pourquoi vous pouvez déclarer une nouvelle propriété de manière explicite ou utiliser l'option @synthesize
[À propos] pour en créer un nouveau ou le lier à un existant
@interface SomeClass() @property (nonatomic, strong) NSString *someVariable; @end
@implementation SomeClass
(void) foo {
//property getter method NSString a1 = self.someVariable; //NSString a1 = [self someVariable];
//property setter method self.someVariable = @"set someVariable"; //[self setSomeVariable:@"set someVariable"];
//iVar read NSString *a2 = _someVariable; //iVar write _someVariable = @"set iVar";
}
//if you overriding someVariable getter and setter the iVar(_someVariable) is not generated, that is why you can:
//1. create some variable explicitly NSString *_someVariable;
//or
//2. use @synthesize @synthesize someVariable = _someVariable;
//overriding
(NSString*) someVariable { return _someVariable; }
(void)setSomeVariable: (NSString*) updatedSomeVariable { _someVariable = updatedSomeVariable; }
@end
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.