Ios Cocoa类中变量声明的差异

Ios Cocoa类中变量声明的差异,ios,xcode,cocoa-touch,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, r

我是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
#导入
@接口类:NSObject{
NSArray*(u infos);
NSString*\u上下文;
}
@属性(非原子,保留)NSArray*信息;
@属性(非原子,保留)NSString*上下文;
@结束
#导入“Class.h”
@实现类
@综合信息=_信息;
@综合上下文=_上下文;
@结束

然后再考虑这是我通常会做的:

#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
#导入
@接口类:NSObject{
NSArray*信息系统;
NSString*上下文;
}
@属性(非原子,保留)NSArray*信息;
@属性(非原子,保留)NSString*上下文;
@结束
#导入“Class.h”
@实现类
@综合信息;
@综合语境;
@结束

有什么区别?从符号我可以推断他们只是将变量声明为私有的,但是它是如何工作的呢?如果我是正确的。

唯一的区别是保存属性的IVAR(“实例变量”)的名称。

唯一的区别是保存属性的IVAR(“实例变量”)的名称。

这是一个愚蠢的命名约定。想用就用,不想用就不用

优点是名为
context
的方法参数/局部变量与ivar
\u context
不冲突。它与隐私关系不大,因为您可以只指定@private将ivar设置为私有(或者首先将它们合成)

缺点是到处都有下划线,而且下划线在C语言中有时有点特殊(尽管下划线后面跟一个小写字母只保留在文件范围内,所以如果ivar以一个小写字母开头,您就可以了…)。在必要的地方,我会在末尾加一个下划线,让人感觉不那么脏


旁注:一些人使用以下划线开头的方法名来表示“private”,但这种约定是错误的。

这是一种愚蠢的命名约定。想用就用,不想用就不用

优点是名为
context
的方法参数/局部变量与ivar
\u context
不冲突。它与隐私关系不大,因为您可以只指定@private将ivar设置为私有(或者首先将它们合成)

缺点是到处都有下划线,而且下划线在C语言中有时有点特殊(尽管下划线后面跟一个小写字母只保留在文件范围内,所以如果ivar以一个小写字母开头,您就可以了…)。在必要的地方,我会在末尾加一个下划线,让人感觉不那么脏

旁注:一些人使用以下划线开头的方法名来表示“private”,但这种约定是无效的