我正在App Store中收听/观看Paul Hegarty的教程。在他的课程中,他声明你应该总是在实现文件中综合你的属性,如下所示:
@sysnthesize example = _example;
我也在做一个不合成属性的苹果文档教程。它也有如下的init方法:
- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date
{
self = [super init];
if (self)
{
_name = name;
_location = location;
_date = date;
return self;
}
return nil;
}
@end
如果将它们加在一起,它们会相互影响,取消或以其他方式混淆:
@implementation BirdSighting
@synthesize name = _name;
@synthesize location = _location;
@synthesize date = _date;
- (id)initWithName:(NSString *)name location:(NSString *)location date:(NSDate *)date
{
self = [super init];
if (self)
{
_name = name;
_location = location;
_date = date;
return self;
}
return nil;
}
@end
感谢您的帮助。
答案 0 :(得分:4)
用“这些相互作用”来思考它可能不是正确的心理模型。开始的地方是了解每条线的作用。所以让我们考虑每个例子中的一个:
@synthesize name = _name;
如果存在名为name的属性(@property,通常在.h中),那么这会做一些事情:
现在是另一个例子:
_name = name;
这有一件事;它将'name'的地址分配给实例变量_name。
现在,我们了解他们的行为,让我们考虑一下他们的互动方式:
另外一个考虑因素: 在Xcode的最新版本中,如果你将它放在一边,编译器会自动为你提供@synthesize语句。这是一件好事(打字少,冗余少,错误少),但如果你不期待它可能会让人感到困惑。例如,我的上述第1点将不适用于新版本。