En utilisant cette syntaxe est une option pour le rendre plus clair que la Ivar et la propriété sont des choses différentes.
Pour coder externe à la classe, il n'y a aucune différence car il utilise la propriété.
Pour le code dans l'implémentation de la classe elle-même, cela peut le rendre plus clair lorsque l'ivar est utilisé par rapport à la propriété.
Par exemple, disons que nous avons une Ivar/propriété pour un objet NSNumber:
@interface MyClass : NSObject {
NSNumber *num;
}
@property (nonatomic, retain) NSNumber *num;
- (void)doSomething;
@end
@implementation MyClass
@synthesize num;
- (void)doSomething {
// set the property, num is properly retained
self.num = [NSNumber numberWithInteger:1];
// accidentally set the ivar, num is NOT retained
num = [NSNumber numberWithInteger:2];
}
@end
et en utilisant maintenant un nom différent pour le Ivar et la propriété:
@interface MyClass : NSObject {
NSNumber *i_num;
}
@property (nonatomic, retain) NSNumber *num;
- (void)doSomething;
@end
@implementation MyClass
@synthesize num = i_num;
- (void)doSomething {
// set the property, num is properly retained
self.num = [NSNumber numberWithInteger:1];
// compiler error, there is no ivar named "num"
num = [NSNumber numberWithInteger:2];
// set the ivar, so it needs to be a retained object
i_num = [[NSNumber alloc] initWithInteger:3];
}
@end
J'ai vu 'ivar_' être utilisé à la place de' _ivar' aussi, mais je ne peux pas vraiment en faire un argument, sauf qu'ils ont l'air mieux ... –