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

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

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...