ios - cocoa 类中变量声明的差异

标签 ios xcode cocoa-touch

我是iOS开发的新手,在一些教程中以及在子类化子类时Xcode为我自动生成代码的过程中,我一直看到以下内容。假设我有以下.h和.m文件

#import <UIKit/UIKit.h>

@interface Class : NSObject {
    NSArray *_infos;
    NSString *_context;
}

@property (nonatomic, retain) NSArray *infos;
@property (nonatomic, retain) NSString *context;

@end

#import "Class.h"

@implementation Class

@synthesize infos = _infos;
@synthesize context = _context;

@end

然后考虑一下这就是我通常会做的事情:
#import <UIKit/UIKit.h>

@interface Class : NSObject {
    NSArray *infos;
    NSString *context;
}

@property (nonatomic, retain) NSArray *infos;
@property (nonatomic, retain) NSString *context;

@end

#import "Class.h"

@implementation Class

@synthesize infos;
@synthesize context;

@end

有什么不同?从表示法上我可以推断出它们只是将变量声明为 private 变量,但是它如何工作?如果我是对的。

最佳答案

这是一个愚蠢的命名约定。如果需要,请使用它,否则请不要使用。

优点是方法参数/名为context的局部变量与ivar _context不冲突。它与隐私无关,因为您可以仅指定@private来将ivars设为 private (或首先对它们进行@synthesize编码)。

缺点是您到处都有下划线,下划线在C语言中有时有点特殊(尽管下划线后跟小写字母仅在文件范围内保留,因此如果ivar以小写字母开头,则应该没问题。 )。如有必要,我在结尾处加下划线,以减少脏污。

旁注:少数人使用以下划线开头的方法名称表示“ private ”,但是此约定为reserved by Apple

关于ios - cocoa 类中变量声明的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6527927/

相关文章:

swift - Xcode从命令行执行 “Test”?

xcode - 由于脚本错误,无法在构建阶段上传 Crashlytics dSYM 文件

引用文件夹中的 iOS 自定义字体

ios - Waze 如何通过定位改变对象的位置?

iphone - 从 iphone 应用程序控制位置服务

ios - 在 iOS 中使用 Flurry Analytics 结束 session

html - 将 HTML 转换为带有标签的字符串

objective-c - 没有 WebView 的 UITableViewCells 中的属性字符串?

ios - UINavigationController 转换委托(delegate)

ios - 存储元数据和托管对象模型之间的兼容性标准是什么?