我怀疑这个问题已经被提出和回答了,但我已经读了很多关于这个问题的帖子,我不是完全清楚答案。
我通常发现在my.m文件的implementation部分中将私有变量声明为实例变量非常方便,如下所示:
@implementation ViewController {
int someNum;
NSObject *myObj;
}这是可以的吗,或者是目前的最佳实践?出于某种原因,我需要声明属性吗?
发布于 2013-05-09 17:56:14
一种方法是在.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或者只是访问隐式的私有ivar
[_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总之。你所做的没有错,但还有其他的技术和工具可以让你做更多的事情。
https://stackoverflow.com/questions/16458012
复制相似问题