2011-09-27 77 views
0

我从来没有考虑过这个问题,直到我运行Xcode“分析”功能。假设我有一个名为dude的类,我创建了一个类的实例并合成它,因此self.dude可用。命名伊娃与类名相同

这工作得很好。然而,在dealloc如果我把:

[self.dude release]; 

我得到一个分析器警告,因为真的是应该是:

[dude release]; 

然而,这产生另一个警告,如分析认为我送的release到类名,而不是伊娃。

现在,如果伊娃被命名为与课程不同的东西,那么没有任何问题,并且[ivar release];可以在没有分析器警告的情况下正常工作。

我是否应该将此作为一般性指示,指出ivar与类名相同并不明智?它从来没有干扰我的产品编辑或执行,但分析仪开启了关于此的新问题。

+0

按照约定,类名以大写字母开头,变量以小写字母开头。如果你遵循这个惯例,你应该没有问题。 –

+1

你不应该真的叫释放财产,因为它不是真正的伊娃。它可能是一个副本或已经添加到autoreleasepool与[[var retain] autorelease]范例,应直接调用ivar'[dude release]'。 – bigkm

+1

@bigkm对于'self.dude = nil'和'[dude release]'哪个更好:p – Yuji

回答

3

你应该用大写字母(Dude)和实例变量(以及其他有关该事项的变量)以小写字母(dude)开头。这完全避免了这个问题,你也应该遵循Objective-C的标准命名约定。

+0

有趣的是,Apple模板以小写字母开头,比如'projectViewController.m' – johnbakers

+0

@andrewx - 你在哪看到这个?他们可能会命名类projectViewController的_instance_,但不是类本身 – jrturton

+0

我指的是单视图模板中视图控制器的自定义子类;但现在我意识到它只是将您的项目名称作为子类名称 – johnbakers

0

以小写字母开头的类名肯定不是一种常见的做法。 Objective-C/Cocoa约定是你用一个大写字母开始一个类名,方法名和带有小写字母的实例变量名。

只要按照常规做法,并命名您的类Dude并命名您的ivar dude