微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

objective-c – 何时使用实例变量以及何时使用属性

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

解决方法

can you stop creating instance variables altogether

不,你不能(在某种意义上).如果你有属性,你可以做的就是停止声明它们.如果您合成了一个属性但尚未声明instvar,那么它将为您声明,因此您正在创建一个实例变量,而不是显式的.

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

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

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

编辑

还有一件事:您现在可以在@implementation中声明实例变量,因此现在不需要泄漏@interface中的任何实现细节.即

@implementation MyClass
{
    Nsstring* myString;
}
// method deFinitions
@end

而且我很确定它也适用于类别. – 见下面的评论

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐