当我们自动创建核心数据对象时,我会看到一行
@synthesize managedObjectContext=__managedObjectContext;
但是,我认为我们不会需要那条线,因为代码也会产生一个函数
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
那我在这里错过了什么?
为什么要合成我们写的代码?
答案 0 :(得分:2)
@synthesize
指令
...告诉编译器它应该为属性合成setter和/或getter方法,如果你不在
@implementation
块中提供它们。
您仍然可以创建自己的实现。
那么为什么要使用@synthesize
?将名为__managedObjectContext
的变量(存储)与名为managedObjectContext
的属性(公共访问点)相关联。
为什么这样?正如Henrik所说,这样你就可以进行懒惰的存储设置。
答案 1 :(得分:1)
因为@synthesize managedObjectContext=__managedObjectContext;
为您的property(实例变量)创建了在对象范围内有效的getter和setter。您正在使用您提到的方法(懒惰)设置它时访问此属性。
答案 2 :(得分:1)
来自关于tuts的伟大核心数据系列:“因为TSPAppDelegate类接口中的属性被声明为readonly,所以没有创建setter方法。第一个@synthesize指令告诉编译器将_managedObjectContext实例变量与我们在类的接口中声明的managedObjectContext属性。这是懒惰加载对象的常见模式。“
http://code.tutsplus.com/tutorials/core-data-from-scratch-core-data-stack--cms-20926