我是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
有什么区别?从符号我可以推断他们只是将变量声明为私有,但它是如何工作的?如果我是对的。
答案 0 :(得分:4)
这是一个愚蠢的命名惯例。如果你愿意,可以使用它,如果不愿意,可以使用它。
优点是名为context
的方法参数/局部变量不与ivar _context
冲突。它与隐私无关,因为您可以指定@private将ivars设为私有(或者首先只放置@synthesize
个。)
缺点是你到处都有下划线,并且下划线偶尔会在C中有点特殊(虽然下划线后面跟一个小写字母只保留在文件范围内,所以你应该提供ivar以小写字母开头......)。如有必要,我会在 end 处加上一个下划线,感觉不那么脏。
旁注:有些人使用以下划线开头的方法名称来表示“私有”,但此惯例为reserved by Apple。
答案 1 :(得分:0)
唯一的区别是保存属性的ivars(“实例变量”)的名称。