说我有一个这样的类:在内部访问实例变量时,我应该使用属性还是直接引用?
@interface MyAwesomeClass : NSObject
{
@private
NSString *thing1;
NSString *thing2;
}
@property (retain) NSString *thing1;
@property (retain) NSString *thing2;
@end
@implementation MyAwesomeClass
@synthesize thing1, thing1;
@end
当访问thing1
和thing2
内部(即,MyAwesomeClass
实施内),是它更好地使用该属性,或者只是直接引用实例变量(假设我们没有在“自定义”访问或增变器中做任何工作,即我们只是设置并获取变量)。 Pre-Objective C 2.0,我们通常直接访问ivars,但现在通常的编码风格/最佳实践是什么?如果一个实例变量/属性是私有的,并且根本不可访问,那么这个建议是否会改变?你是否应该为每个伊娃创建一个财产,即使它们是私人的,或者只是面向公众的数据?如果我的应用程序不使用键值编码功能(因为KVC只针对属性访问)?
我对超越低级技术细节感兴趣。例如,给定(子最佳)码等:
@interface MyAwesomeClass : NSObject
{
id myObj;
}
@proprety id myObj;
@end
@implementation MyAwesomeClass
@synthesize myObj;
@end
我知道myObj = anotherObject
在功能上相同self.myObj = anotherObj
。
但是,属性不仅仅是指导编译器为您编写访问器和修改器的花哨语法,当然,它们也是更好地封装数据的一种方式,也就是说,您可以在不重写依赖这些属性的类的情况下更改该类的内部实现。我对处理该类自己的内部代码时解决此封装问题的重要性的答案感兴趣。此外,正确编写的属性可以激发KVC通知,但直接ivar访问不会;如果我的应用程序不使用KVC功能现在,以防万一它在将来可能?
谢谢。你和Allen Ding都有特别好的答案。 – mipadi 2010-09-30 14:29:24