gpt4 book ai didi

objective-c - @property 和@synthesize

转载 作者:太空狗 更新时间:2023-10-30 03:30:34 27 4
gpt4 key购买 nike

我是 Objective C 的新手。(现在已经两天了)。当阅读 @synthesize 时,它似乎与我对 @property 的理解重叠(我认为我理解)......所以,一些细节需要在我的介意...这让我很烦。

如果我对@property@synthesize 的区别有误,请纠正我:

如果您在 @interface 中声明了一个 @property,那么您就是在告诉全世界用户可以期望对该属性使用标准的 getter 和 setter。此外,XCode 将为您制作通用的 getter 和 setter。 ... 但是,@property 声明在多大程度上发生了? (即,这是否意味着“完全”......就像在您的 @interface 中看不见的声明,以及在您的 @interface 中看不见的代码?

-或者-

@property 是否仅处理您的@interface 中看不见的代码声明 - 而@synthesize 处理看不见的代码实现在您的 @implementation 部分? )

最佳答案

首先,请注意最新版本的 Xcode 不再需要 @synthesize。你可以(并且应该)忽略它。也就是说,这就是这些片段的作用。

@property 是访问器的声明。这只是一个声明。以下内容之间几乎没有区别:

@property (nonatomic, readwrite, strong) NSString *something;

对比

- (NSString *)something;
- (void)setSomething:(NSString)aSomething;

主要区别在于,使用 @property 声明这些方法可以让编译器自动为您生成(合成)实现。无需让编译器为您完成。您完全可以自由地手动实现 somethingsetSomething:,这很常见。但是,如果您不手动实现它们,编译器会自动为您创建一个名为 _something 的 ivar,并为 getter 和 setter 创建一个合理的实现。

在旧版本的 Xcode 中,您必须使用 @synthesize 关键字明确请求自动生成。但这不再是必需的。今天,使用 @synthesize 的唯一原因是您希望 ivar 具有非标准名称(永远不要那样做)。

这里的一个关键点是方法 somethingsetSomething: 只是方法。他们没有什么神奇的。它们不是特殊的“属性方法”。它们只是按照惯例访问一个状态的方法。该状态通常存储在 ivar 中,但并非必须如此。

更清楚一点:object.something 不是 意思是“从 object 返回名为 _something 的 ivar >"它的意思是“返回 [object something] 的结果,不管它做了什么。”返回 ivar 的值是很常见的。

您应该使用@property 声明来声明您的所有状态(内部和外部),并且您应该避免直接声明ivars。您还应该始终通过它们的访问器 (self.something) 访问您的属性,initdealloc 方法除外。在initdealloc 中,您应该直接使用ivar (_something)。

关于objective-c - @property 和@synthesize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com