objective-c - 使用下划线作为前缀命名实例变量在 Cocoa (Objective-C) 中是否有任何副作用?

标签 objective-c cocoa frameworks naming-conventions private-header

Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?

我发现在Apple框架的头文件中,Apple名称实例变量在类接口(interface)内带有前缀underscope。 就像下面的 _delegate 实例一样:

@interface ClassName : NSObject {
    id _delegate;
}
@end

但是如果我们在定义自己的实例变量时遵循这个命名约定,会有副作用吗?我已经寻找这个问题的答案很长时间了。

在苹果的代码指南中,苹果只是说他们保留以下划线开头的方法名称,他们没有提到任何关于实例变量命名问题的限制。

我的同事说,如果您定义以下划线开头的实例变量,如果您选择的名称存在于框架的私有(private)头文件中,则可能会与框架发生冲突。这是否可能,或者这是否成为我们不应该使用以下划线开头的名称的原因,因为苹果可能已经使用了它?

最佳答案

没有副作用。但是,在访问私有(private) ivars 和函数参数名称时,使用下划线可以更轻松地阅读代码。

例如,假设您的头文件中有 NSString *_name; 。 然后在您的代码中将如下所示:

- (void)doSomethingWithName:(NSString *)name {
    // the underscore makes reading code easier
    _name = [name retain];
    name = [_name retain];  // you know right away that this is wrong
}

我个人关注Google Objective-C Style Guide并使用 trailing underscore 。所以我的 ivars 是: NSString *name_;

关于objective-c - 使用下划线作为前缀命名实例变量在 Cocoa (Objective-C) 中是否有任何副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620658/

相关文章:

ios - 是什么导致 iOS 链接错误?

java - java 是否有一个简约的 WebSocket 客户端库?

c# - 同步框架: How to check if a Row has been Synchronized with Miscrosoft Azure?

ios - Photoshop 字体像素大小到 Xcode Interface builder 字体点大小

objective-c - 如何让 iTunes 跳到轨道的特定时间?操作系统X

swift - 如何防止 MacOS WebView 在点击选项卡后失去第一响应者?

objective-c - 在基于 NSTableView 的 View 中处理自定义选择样式

objective-c - 客观c类(class)的简单问题

ios - 在 UITableView 中点击已选定的单元格时,将调用 willSelectCellAtIndexPath

macos - 阴影效果不适用于可调整大小的 NSView