目的是什么:@synthesize variableName = __ variableName;

Cus*_*ons 2 xcode ios ios7

在我的Xcode Apple模板中,managedObjectContext在AppDelegate.m中合成,如下所示:

@synthesize managedObjectContext = __managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

我从来没有理解 = __managedObjectContext; 部分.请有人解释一下吗?(它是否调用方法'managedObjectContext'?)

谢谢.

Ste*_*her 7

它是为后备实例变量赋予名称__managedObjectContext.如果只是@synthesize managedObjectContext,那么支持变量就会被命名managedObjectContext.

有了这个@synthesize,虽然,这是因为如果你键入:

@implementation MyObject {
    ManagedObjectContextType __managedObjectContext;
}

- (ManagedObjectContextType)managedObjectContextType {
    return __managedObjectContext;
}

- (void)setManagedObjectContext:(ManagedObjectContextType *)managedObjectContext {
    __managedObjectContext = managedObjectContext;
}
Run Code Online (Sandbox Code Playgroud)

(是的,我正在简化一下.)

以前,@synthesize是必需的.现在,在大多数情况下,您可以跳过它.当你跳过它时,它相当于@synthesize managedObjectContext = _managedObjectContext(注意单个下划线).

它仍有一些用处:如果你不包含一个@synthesize语句但是包含一个setter/getter,编译器将不会自动为你创建一个后备变量.你可以这样做,即使你包括一个getter/setter @synthesize thing = _thing.