Une technique consiste à déclarer une extension de classe dans le .m
@interface MyViewController() {
NSInteger someNumber;
NSObject *myObject;
}
@end
@implementation MyViewController
-(void)someMethod {
someNumber++;
}
@end
En supposant ARC
vous obtiendrez de fortes références à des types objet. Ce n'est pas différent de ce que vous avez fait. Il suffit de séparer l'interface et la mise en œuvre plus clairement et se prête également à des modèles tels que
Cependant, avec les propriétés, vous avez la possibilité de manipuler les accesseurs et vous obtenez gratuitement KVC
.
@interface MyViewController() {
NSInteger someNumber;
}
@property (copy,readwrite,nonatomic) NSObject *myObject;
@end
@implementation MyViewController
-(void)someMethodWhichNeedsACopy:(NSObject *)aobj {
self.myObject = aobj; //free copies , no smudging!
}
@end
Et en plus vous permet de passer outre
-(void)setMyObject:(NSObject *)aobj
-(NSObject *)myObject
ou tout simplement accéder au Ivar privé implicite
[_myObject doSomethingCool];
_myObject.thing = something;
ou utilisez la KVC donnée à vous par les accesseurs générés
[myViewControllerInstance addObserver:someOtherObject forKeyPath:@"myObject" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]
, après quoi someOtherObject
recevront des messages de la forme
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
En bref. Ce que vous faites n'est pas faux, mais il existe d'autres techniques et outils à explorer avec lesquels vous pouvez faire plus de choses.
Déclarer des variables dans le fichier .h et le rendre comme @private est un moyen de codage plus ancien. Avoir ces variables dans votre implémentation .m en fait, c'est la norme actuelle de l'industrie. – nik