在学习 Objective C 的同时,我已经习惯了 @property 和 @synthesize 的工作方式。
//usual way
@synthesize world;
但最近我遇到的做法是@synthesize 是这样的:
//new way
@synthesize world=world_;
有人可以解释为什么使用这种技术吗?
谢谢,
标记
在学习 Objective C 的同时,我已经习惯了 @property 和 @synthesize 的工作方式。
//usual way
@synthesize world;
但最近我遇到的做法是@synthesize 是这样的:
//new way
@synthesize world=world_;
有人可以解释为什么使用这种技术吗?
谢谢,
标记
我相信这是为了避免实际 ivar 名称和属性名称之间的混淆。所以你可以拥有
@interface MyClass : NSObject
{
NSObject *_myObjActualIVar;
}
@property (retain) NSObject *myObjProperty;
@end
@implementation MyClass
@synthesize myObjProperty = _myObjActualIVar;
- (void) someMethod: (NSObject *)someOtherObject
{
[_myObjActualIVar release]; // here I know I'm accessing the ivar
self.myObjProperty = someOtherObject; // here I know I'm using the setter method
//myObjProperty = someOtherObject; // if I accidentally try to do this
//self._myObjActualIVar; // or this, the compiler will tell me
}
@end
然后,当您真正想要该属性时,您或其他一些从事此类工作的开发人员更难无意中访问 ivar,反之亦然。不同的名称可以更清楚地说明哪个是哪个。
您可以使用 property=ivar 的形式来指示应该为属性使用特定的实例变量,例如:
@synthesize firstName, lastName, age = yearsOld