iPhone 合成

发布于 2024-10-03 13:08:48 字数 269 浏览 2 评论 0原文

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

//usual way
@synthesize world;

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

//new way
@synthesize world=world_;

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

谢谢,

马克

Whilst learning Objective C I've gotten used to how the @property and @synthesize works.

//usual way
@synthesize world;

But recently I've come across practices were @synthesize is like this:

//new way
@synthesize world=world_;

Could someone explain why this technique is used please?

Thanks,

Mark

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

街角迷惘 2024-10-10 13:08:49

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

I believe this is used to avoid confusion between the actual ivar name and the property name.
so you can have

@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

and then it makes it harder for you or some other developer working on this class to inadvertently access the ivar when you actually wanted the property or vice-versa. The different names make it clearer which is which.

烛影斜 2024-10-10 13:08:49

来自 Objective-C 2 手册

您可以使用 property=ivar 的形式
表明一个特定的实例
变量应该用于
属性,例如:

@synthesize firstName, lastName, age = yearsOld

from the Objective-C 2 manual:

You can use the form property=ivar to
indicate that a particular instance
variable should be used for the
property, for example:

@synthesize firstName, lastName, age = yearsOld
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文