1

在学习 Objective C 的同时,我已经习惯了 @property 和 @synthesize 的工作方式。

//usual way
@synthesize world;

但最近我遇到的做法是@synthesize 是这样的:

//new way
@synthesize world=world_;

有人可以解释为什么使用这种技术吗?

谢谢,

标记

4

2 回答 2

2

我相信这是为了避免实际 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,反之亦然。不同的名称可以更清楚地说明哪个是哪个。

于 2010-11-19T14:59:49.240 回答
2

来自Objective-C 2 手册

您可以使用 property=ivar 的形式来指示应该为属性使用特定的实例变量,例如:

@synthesize firstName, lastName, age = yearsOld
于 2010-11-19T14:59:49.717 回答