我怀疑这个问题已经被提出并回答了,但是我已经阅读了很多文章,而且我对这个答案并不完全清楚。objective C,properties vs ivars
我一般觉得很方便的声明私有变量,实例变量中的my.m文件实现部分,像这样:
@implementation ViewController {
int someNum;
NSObject *myObj;
}
这是正确的,和或当前最佳实践?出于某种原因,我是否需要声明属性?
我怀疑这个问题已经被提出并回答了,但是我已经阅读了很多文章,而且我对这个答案并不完全清楚。objective C,properties vs ivars
我一般觉得很方便的声明私有变量,实例变量中的my.m文件实现部分,像这样:
@implementation ViewController {
int someNum;
NSObject *myObj;
}
这是正确的,和或当前最佳实践?出于某种原因,我是否需要声明属性?
一种技术是内.m
@interface MyViewController() {
NSInteger someNumber;
NSObject *myObject;
}
@end
@implementation MyViewController
-(void)someMethod {
someNumber++;
}
@end
假设ARC
你会得到强引用的对象类型声明一个类扩展。这与你所做的没有任何不同。它只是分离界面和实施更清晰,也适用于如Private Implementation
模式然而,与属性,你有机会操纵访问者,你也得到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
而且除了允许您覆盖
-(void)setMyObject:(NSObject *)aobj
-(NSObject *)myObject
或刚刚访问隐私伊娃
[_myObject doSomethingCool];
_myObject.thing = something;
或使用KVC由生成的访问给你
[myViewControllerInstance addObserver:someOtherObject forKeyPath:@"myObject" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]
之后someOtherObject
将收到形式
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
在短的消息。你在做什么并没有错,但还有其他的技术和工具可以用来探索你可以做更多的事情。
非常好,谢谢。 – Mrwolfy 2013-05-09 10:12:22
基本上使用可以提供清晰可维护代码的样式。如果你更喜欢公司演出。 – 2013-05-09 10:35:34
在.h文件中声明变量并将其设置为@private是较旧的编码方式。实际上,在你的.m实现中有这些变量是当前的行业标准。 – nik 2013-05-09 09:01:36