Ios Cocoa类中变量声明的差异
我是iOS开发的新手,在一些教程中以及在对我的一个类进行子类化时Xcode为我自动生成代码时,我已经看到了以下内容。假设我有以下.h和.m文件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
#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”,但这种约定是无效的