目标C中合成属性的差异

时间:2013-04-04 11:07:14

标签: ios objective-c

.h文件中的代码

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

.m文件中的代码

@synthesize managedObjectContext = __managedObjectContext;

我是目标c的初学者,我想知道@synthesize managedObjectContext; and @synthesize managedObjectContext = __managedObjectContext;之间有什么区别可以解释一下吗?

2 个答案:

答案 0 :(得分:3)

@synthesize propertyName创建一个变量以使用与属性相同的名称来支持该属性,而@synthesize propertyName = variableName为变量提供一个替代名称(可能是以下划线为前缀的属性名称)。

请注意,在使用@synthesize的最新版本的Xcode附带的编译器中不再需要:编译器会找出需要合成的属性,并隐式插入

@synthesize propertyName = _propertyName;

为每个需要合成的属性。

答案 1 :(得分:0)

如果您使用

@synthesize managedObjectContext = __managedObjectContext;

你可以写这样的行:

__managedObjectContext = someContext;

它将通过直接访问它来更改存储在此属性中的值,而不使用setManagedObjectContext:方法。

但是,这行不正确(除非你之前声明了一些其他的managedObjectContext):

managedObjectContext = someContext; //wrong
self.managedObjectContext = someContext; //good

P.S。顺便说一下,What exactly does @synthesize do?