使用Objective-C属性时,您可以完全停止创建实例变量吗?还是显式的实例变量(不是由属性综合的实例变量)仍然可以满足属性不合适的目的?

最佳答案



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



以前建议您为所有内容创建属性,因为拥有综合属性几乎可以为您完成所有保留和释放。但是,有了ARC,使用属性包装内存管理的原因就消失了。我认为,现在的建议(针对ARC)是使用属性声明您的外部接口(interface),但是使用直接实例变量,其中变量是对象内部状态的一部分。

这是采用ARC的一个很好的理由:属性仅作为类的API的一部分即可恢复其真实目的,并且不再需要将其用作隐藏内存管理工作的简单方法。

编辑

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

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

而且我很确定它也可以在类别中使用。 -请参阅下面的评论

10-08 05:46
查看更多