为什么managedObjectContext属性不会合成自己的实例变量?

时间:2014-08-28 22:41:45

标签: objective-c core-data

appDelegate.h

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

我必须在appDelegate.m

中这样做
    @synthesize managedObjectContext = _managedObjectContext;

我很困惑因为根据苹果

  

注意:编译器将自动合成实例变量   在所有情况下,它也合成至少一个访问者   方法。如果为读写实现getter和setter   编译器将使用属性或只读属性的getter   假设您正在控制属性实现   并且不会自动合成实例变量。如果你还是   需要一个实例变量,你需要请求一个   合成:@synthesize property = _property;

根据它,它应该创建一个实例变量,只要它创建至少一个访问器方法。那么这是否意味着在我声明属性时没有创建的访问器方法?是什么原因。请解释。

我假设编译器知道NSManagedObjectContext有访问器方法。所以它没有创建任何因此它没有创建实例变量。

2 个答案:

答案 0 :(得分:2)

您尚未显示相应.m文件的代码,但我假设您以编程方式实施了managedObjectContext属性getter方法。正如文档所说,"编译器将在所有情况下自动合成一个实例变量,在这种情况下,它还合成至少一种存取方法。"但是,如果为readonly属性提供getter方法的实现,则编译器不会合成任何访问器方法。

答案 1 :(得分:-1)

正如文档所说......如果你为setter或getter提供至少一个访问器方法,它就像告诉编译器一样...不要因为我有一些与setter / getter有关的自定义工作而无法合成这个变量。因此编译器不会自动生成_ivar。如果您需要_ivar,则必须明确指定它,然后继续使用您的客户getter和setter。它是关于Objective C编译器为你做的事情,除非你说不要打扰......我知道我在做什么。