在Objective-C中,实例variables是否默认设置为零?
我正在整理一些内存问题与我的iPhone应用程序,我刚刚考虑一些基本知识。 如果我设置了一个ivar,并且永远不会在我的对象的生命周期中使用它,当我调用dealloc时,会导致一个问题吗? 例如
@interface testClass { id myobject; } @property (nonatomic, retain) id myobject; @end @implementation testClass @synthesize myobject; - (id)init { ... // Do I have to set myobject to nil here? // So if myobject isn't used the dealloc call to nil // will be okay? Or can you release the variable without // having set every object to nil that you may may not use ... } ... // Somewhere in the code, myobject may be set to // an instance of an object via self.myobject = [AnObject grabAnObject] // but the object may be left alone ... - (void)dealloc { [myobject release]; [super dealloc]; } @end
初始化器运行之前,实例variables初始化为0
是的, ivars总是被初始化为0 / nil / NULL / NO / etc。
但是,如果它帮助你了解发生了什么事,那就去做吧。 性能影响可以忽略不计。 你不需要这样做,但是如果你这样做不会造成任何问题。
我发现在init
方法中始终将这些ivars设置为nil
是个好习惯。 这样,你绝对确信你在析构函数release
的调用不会造成问题。
如果事实certificateObjective-C会自动将它们设置nil
,并且由于某种原因,您发现自己的速度瓶颈可以通过删除这些分配来改进(极不可能),那么您可以担心删除它们。 在此期间,把他们都设为nil
,睡觉更容易:)
更新: BJ荷马和Chuck指出,Ivars 将自动设置为零,所以现在归结为风格的决定。