这里有什么约定来命名实例变量和方法参数,特别是当使用方法参数来设置IVARS(实例变量)时?在C++中,我经常使用iCARS的m_前缀。在C i i中,遵循了对IVARS纯粹使用“cc>”消除歧义的约定。此后我也采用了C++中的等价项(this.)。在目标C中,我试过一些东西,但没有一件看起来真的令人满意。除非有人提出一些非常好的建议,否则我不得不妥协(但请不要让我使用this->前缀作为参数!),所以我很想听听大多数人怎么说-特别是那些已经使用objc一段时间的人。在发布之前,我做了一些尽职调查,发现了一些好的资源:This style guide(简要提到我的主题)This thread(这里有大量的EXC++程序员)他们给了我一些想法,但我仍然渴望听到别人在做什么。[编辑]为了澄清:具体地说,你是如何区分IVAR和我正在寻找的方法ARG——不管是通过前缀还是其他技术。[编辑2]感谢所有回复和讨论要点。我并没有结束这一点,但是我会说,正如我在对接受的答案的评论中所说的那样,我已经使用了“我将要做的事情”,并将其加入到了“我的计划”中。这似乎是最好的力量平衡——即使我自己并不热衷于审美。 最佳答案 如您所注意到的,cocoa样式是在参数名与实例变量冲突时使用方法参数名,如theValue。然而,在Objul-C 2风格代码中不应该出现很多次。假设您不应该(通常)直接访问实例变量。这主要是因为这样做规避了可可中的关键价值观察机制。相反,期望是通过GETT/SETTER方法访问和改变属性。在C 2中,很容易声明这些属性,并自动地将它们添加进来,所以没有使用它们的借口。事实上,在64位系统上,运行库将自动为您创建实例变量,避免需要声明它们并减少使用它们的冲动。您应该直接访问实例变量的惟一时间是在 >和 >方法中:@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的原因是因为GETT/SETER可能具有依赖于完全初始化的实例的副作用,从而使它们在和@synthesize中被视为危险,其中对象的状态被完全初始化。在所有其他情况下,您应该使用-init(或-dealloc和-init)。似乎除了-dealloc以外的方法不应该有命名冲突。如果他们这样做了,难道他们不应该没有参数或者类没有实例变量吗?这就只剩下self.ivar方法,在这里您经常会发现参数和ivar之间的冲突。在这种情况下,如果你真的不能忍受可可风格,你可以使用你提到的任何方法。用[self ivar] Word进行前缀是比较常见的(我相信[self setIvar:newValue]定位器和吸收器在这种情况下会自动做正确的事情,但是您可能必须明确地将-initWithXX作为后备)。关于objective-c - objective-c 中的实例变量/方法参数命名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/549962/
10-14 19:55