gpt4 book ai didi

iphone - 在 Objective C 中使用下划线作为属性名称前缀

转载 作者:行者123 更新时间:2023-12-03 20:16:05 25 4
gpt4 key购买 nike

我以前在变量名中避免使用下划线,这可能是我大学 Java 时代的遗留下来的。因此,当我在 Objective C 中定义属性时,这就是我自然会做的事情。

// In the header
@interface Whatever
{
NSString *myStringProperty
}

@property (nonatomic, copy) NSString *myStringProperty;

// In the implementation
@synthesize myStringProperty;

但是在几乎每个例子中都是这样做的

// In the header
@interface Whatever
{
NSString *_myStringProperty
}

@property (nonatomic, copy) NSString *myStringProperty;

// In the implementation
@synthesize myStringProperty = _myStringProperty;

我是否应该克服对下划线的厌恶,因为这是应该完成的一种方式,这种样式成为首选样式有充分的理由吗?

更新:现在,通过自动属性合成,您可以省略 @synthesize,结果与您使用的结果相同

@synthesize myStringProperty = _myStringProperty;

这清楚地表明了苹果的偏好。从那时起,我学会了停止担心并喜欢下划线。

最佳答案

我总是使用下划线。它在局部变量和实例变量之间建立了明确的区别。它还可以避免在以下情况下出现编译器警告:

@interface MyClass
{
NSString *name
}

@property (nonatomic, copy) NSString *name;

- (id) initWithName:(NSString *) name;
@end

@implementation MyClass

@synthesize name;

// The following method will result in a compiler warning
// (parameter name same as ivar name)
- (id) initWithName:(NSString *) name {
if (self = [super init]) {
self.name = name;
}

return self;
}

@end

编辑:

在忍受了反对票并阅读了评论之后,让我尝试阐明我的观点:

Apple 建议 ivars 与其属性具有相同的名称。 Apple 还建议属性以小写字母开头。 Apple 还建议局部变量以小写字母开头。

现在你遇到了一个问题,因为当你阅读一段代码时,你看到一个正在使用的变量,你无法通过命名约定来判断这个变量是 ivar 还是局部变量。太糟糕了。解决方案是对 ivar 和局部变量采用不同的命名约定。这只是简单的常识。

实现此命名约定的方式无关紧要。如果您确实需要,只需将“_WOOHAHA”附加到 ivar 名称即可。我不在乎(但也许其他人会在乎)。问题是,那些知道自己在做什么的人决定为 ivars 使用“下划线前缀”。恕我直言,他们做出了正确的决定,即使他们自己的公司推荐了其他东西。 (我所说的开发人员是编写一些主要 Apple 框架和 .NET Framework 类的人)

最后,代码质量比遵循甚至宣扬它的人都不遵守的愚蠢规则更重要。

<小时/>

关于您所显示的代码的另一条注释:切勿在字符串属性上使用retain。您应该使用复制来代替。

有关复制/保留属性的详细信息,请参阅:

NSString property: copy or retain?

关于iphone - 在 Objective C 中使用下划线作为属性名称前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6146244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com