gpt4 book ai didi

objective-c - 何时使用实例变量,何时使用属性

转载 作者:可可西里 更新时间:2023-11-01 04:06:37 25 4
gpt4 key购买 nike

当使用 Objective-C 属性时,您是否可以完全停止创建实例变量,或者让显式实例变量(不是由属性合成的实例变量)仍然服务于属性不合适的目的?

最佳答案

can you stop creating instance variables altogether

不,你不能(在某种意义上)。如果您有属性,您可以做的就是停止声明它们。如果您合成一个属性并且您没有声明 instvar,它将为您声明,因此您正在创建一个实例变量,只是没有显式地创建。

do they still serve a purpose where properties would be inappropriate?

它曾经是为所有事物创建属性的建议,因为合成属性几乎可以为您完成所有的保留和释放。然而,对于 ARC,使用属性来包装内存管理的原因已经消失了。我相信现在(针对 ARC)的建议是使用属性来声明外部接口(interface),但使用直接实例变量,其中变量是对象内部状态的一部分。

这是采用 ARC 的一个很好的理由:属性恢复到它们的真正目的,只是作为类 API 的一部分,不再需要将它们用作隐藏内存管理工作的 hacky 方法。

编辑

还有一件事:您现在可以在@implementation 中声明实例变量,因此现在无需在@interface 中泄露任何实现细节。即

@implementation MyClass
{
NSString* myString;
}
// method definitions
@end

而且我很确定它也适用于类别。 - 请参阅下面的评论

关于objective-c - 何时使用实例变量,何时使用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432441/

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