【问题标题】:Naming ivar the same as the class name命名 ivar 与类名相同
【发布时间】:2011-09-27 13:11:40
【问题描述】:

在我运行 Xcode“分析”功能之前,我从未认为这是一个问题。假设我有一个名为 dude 的类,我创建了一个类的实例并合成了它,因此 self.dude 可用。

这很好用。但是,如果我在dealloc 中输入:

 [self.dude release];

我收到分析器警告,因为它应该是:

[dude release];

但是,这会产生另一个警告,因为 Analyzer 认为我将 release 发送到类名,而不是 ivar。

现在,如果 ivar 被命名为与类不同的名称,则没有问题,[ivar release]; 可以在没有分析器警告的情况下工作。

我是否应该将此作为一般指示,将 ivar 命名为与类名相同的名称是不明智的?它从未干扰过我的产品编译或执行,但分析器对此提出了新问题。

【问题讨论】:

  • 按照惯例,类名以大写字母开头,变量以小写字母开头。如果你遵循这个约定,你应该不会有问题。
  • 您不应该真正调用该属性的释放,因为它不是真正的 ivar。它可能是一个副本或已经添加到具有 [[var retain] autorelease] 范例的自动释放池中,应该直接调用 ivar [dude release]
  • @bigkm self.dude=nil[dude release] 哪个更好:p
  • @Yuji 这不是我在说的,我不小心按了回车,不得不完成我的评论。
  • @bibkm 啊,我明白了。 [self.dude release] 肯定是错的,我同意。

标签: objective-c xcode


【解决方案1】:

您应该以大写字母 (Dude) 开头类名,以小写字母 (dude) 开头的实例变量(和其他变量)。这完全避免了这个问题,而且您还可以遵循 Objective-C 的标准命名约定。

【讨论】:

  • 有趣的是,Apple 模板的类名以小写字母开头,例如 `projectViewController.m'
  • @andrewx - 你在哪里见过这个?他们可能会命名类 projectViewController 的 instance,但不能命名类本身
  • 我指的是单视图模板中视图控制器的自定义子类;但现在我意识到它只是将您的项目名称作为子类名称
【解决方案2】:

以小写字母开头的类名绝对不是常见的做法。 Objective-C/Cocoa 的约定是类名以大写字母开头,方法名和实例变量名以小写字母开头。

只需按照惯例,将您的班级命名为 Dude,并将您的 ivar 命名为 dude

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多