当前位置:  开发笔记 > 编程语言 > 正文

Objective C中的实例变量/方法参数命名

如何解决《ObjectiveC中的实例变量/方法参数命名》经验,为你挑选了1个好方法。

以下人们对实例变量和方法参数的命名有什么约定 - 特别是当使用方法参数来设置ivars(实例变量)时?

在C++中,我过去经常使用m_ivars 的前缀.在C#中,我遵循了纯粹使用this.ivars 消除歧义的惯例.我已经采用了C++中的等价物(this->).

在目标C中我尝试了一些事情,但没有一个真的令人满意.

除非有人建议一些非常好的东西,否则我将不得不妥协(但请不要让我使用theargs 的前缀!),所以我很想听听大多数人说的话 - 尤其是来自那些一直使用ObjC的人.

在发布这个之前我做了一些尽职调查,并且发现了一些很好的资源:

这个风格指南(简要提到我的主题)

这个帖子(那里有很多ex C++编码器)

他们给了我一些想法,但我仍然渴望听到别人在做什么.

[编辑]只是为了澄清:具体是你如何区分我正在寻找的方法和方法 - 无论是通过前缀还是其他技术.

[编辑2]感谢所有的回复和讨论要点.我不是要关闭这个,但只是说,正如我在评论中指出的那样,我接受了使用init args前缀的惯例the(以及setter args with new,无论如何我都在做).这似乎是力量的最佳平衡 - 即使我自己并不热衷于审美.



1> Barry Wark..:

正如您所指出的,Cocoa样式是使用方法参数名称,theValue如果参数名称将与实例变量冲突.然而,在Objective-C 2.0样式代码中出现这种情况不应该多次.假设你不应该(通常)直接访问实例变量.这主要是因为这样做可以绕过Cocoa中的Key-Value Observing机制.相反,期望您将通过getter/setter方法访问和改变属性.在Objective-C 2.0中,很容易声明这些属性并自动声明@synthesizegetter/setter,因此没有多少借口不使用它们.事实上,在64位系统上,运行时将自动为您创建实例变量,从而无需声明它们并减少使用它们的冲动.

您应该直接访问实例变量的唯一时间是-init-dealloc方法:

@interface MyObject : NSObject 
{
  id ivar;
}

@property (retain,readwrite) id ivar; //or whatever retain/copy/assign and read/readwrite makes sense
@end

@implementation MyObject
@synthesize ivar;

- (id)initWithIvar:(id)theIvar {
  if(self = [super init]) {
    ivar = theIvar;
  }

  return self;
}

- (void)dealloc {
  [ivar release];
}

所述的ivar应直接在这些情况下所使用的原因是怎么一回事,因为吸气剂/调节器可具有副作用,取决于完全初始化实例,从而使它们在危险-init-dealloc在对象的状态被完全初始化.在所有其他情况下,您应该使用self.ivar(或[self ivar][self setIvar:newValue]).

似乎除了-initWithXX不应该有命名冲突的方法.如果他们这样做,他们不应该重构不具有该参数或者Class不具有实例变量吗?

这就留下了-initWithXX经常在参数和ivars之间发现冲突的方法.对于这种情况,如果你真的无法忍受Cocoa风格,你可以使用你提到的任何方法.使用_作品进行前缀并且相对常见(我相信@synthesize'd setter和getters在这种情况下会自动做正确的事情,但您可能必须明确地将其设置_ivar为支持).


谢谢巴里.在类实现中使用访问器的麻烦在于它们会增加很大的开销 - 您可以在桌面应用程序中忽略它们,但在iPhone上它们可以添加.另外,正如你所说,它们可能会产生你不想要的副作用......
推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有