gpt4 book ai didi

ios - 为什么要使用@synthesize 语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:42 27 4
gpt4 key购买 nike

当我第一次学习 iOS 编程时(我相信这是来自斯坦福大学 ARC 之前的讲座),我们总是这样综合属性:

@synthesize myProperty=_myProperty

但是,这似乎是 default behaviour一阵子。因此,省略此语句与保留它完全相同。

我的问题是:鉴于此默认行为,有哪些我们实际想要使用 @synthesize 语句的实际示例

最佳答案

在 iOS 6 中,LLVM 编译器附带了一种叫做“属性自动合成”的东西。基本上,这意味着编译器将为它看到的每个 @property 添加一个 @synthesize,格式如下:

@synthesize propertyName = _propertyName;

也就是说,它将创建一个带有下划线前缀的 ivar,并使用该 ivar 生成 getter 和 setter。

明确使用 @synthesize 的原因只有一个,原因是重命名 ivar,或者,例如,为两个不同的属性使用相同的 ivar。

另请注意,在某些情况下您需要使用@dynamic 来阻止合成。通常当您知道方法(getter 或 setter)已在某处定义但编译器不知道它们时。

自动合成没有内存影响,因此它根本没有连接到 ARC。

What if I manually implement getter and a setter?

如果该属性是可读写的并且您同时实现了 setter 和 getter,或者如果该属性是只读的并且您实现了 getter,则不会合成任何内容。综合指的是两种方法的自动定义。为什么编译器要合成已经存在的东西?如果手动实现需要一个ivar,只需声明ivar,你不需要添加@synthesize只是为了添加一个ivar(尽管你可以)。

编辑

我忘记了一个需要使用 @synthesize 的原因,那就是在实现协议(protocol)中声明的属性时。这样的属性不会自动合成。一个典型的例子是[UIApplicationDelegate window]

关于ios - 为什么要使用@synthesize 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941182/

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