在我的Xcode Apple模板中,managedObjectContext在AppDelegate.m中合成,如下所示:
@synthesize managedObjectContext = __managedObjectContext;
我从未理解 = __managedObjectContext; 部分。请有人解释一下吗? (是否调用方法'managedObjectContext'?)
感谢。
答案 0 :(得分:7)
为后台实例变量指定名称__managedObjectContext
。如果您只是@synthesize managedObjectContext
,则支持变量名为managedObjectContext
。
使用此@synthesize
,就好像你输入了一样:
@implementation MyObject {
ManagedObjectContextType __managedObjectContext;
}
- (ManagedObjectContextType)managedObjectContextType {
return __managedObjectContext;
}
- (void)setManagedObjectContext:(ManagedObjectContextType *)managedObjectContext {
__managedObjectContext = managedObjectContext;
}
(是的,我简化了一点。)
以前,@synthesize
是必需的。现在,在大多数情况下,您可以跳过它。当您跳过它时,它相当于@synthesize managedObjectContext = _managedObjectContext
(注意单个下划线)。
它仍然有一些用处:如果你没有包含@synthesize
语句但是包含一个setter / getter,编译器将不会自动为你创建一个后备变量。即使您通过加入@synthesize thing = _thing
来包含getter / setter,也可以这样做。
答案 1 :(得分:1)
好问题。
您可以在项目的managedObjectContext
文件中看到变量AppDelegate.h
的声明,即
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
对于声明为 readonly
的变量,我们无法分配任何值。但是,对于将变量创建为readonly
的人,应在其程序中指定一个值。因此,为此,他通过合成来存储或引用相同的变量,并且可以使用self.managedObjectContext
或_managedObjectContext
变量作为本地或私有变量{{1 }}
答案 2 :(得分:1)
创建@property 2时正在生成一个方法 - 一个getter和一个setter。 属性名称x的默认值,即@property x,是:
-(void) setX:(int)x;
-(int) x;
每次调用self.x时,都会调用getter / setter。
要直接访问实例变量,您需要调用_x.
如果你想在没有下划线的情况下拨打x,你应该使用:
@synthsize x = _x;