appDelegate.h
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
我必须在appDelegate.m
中这样做 @synthesize managedObjectContext = _managedObjectContext;
我很困惑因为根据苹果
注意:编译器将自动合成实例变量 在所有情况下,它也合成至少一个访问者 方法。如果为读写实现getter和setter 编译器将使用属性或只读属性的getter 假设您正在控制属性实现 并且不会自动合成实例变量。如果你还是 需要一个实例变量,你需要请求一个 合成:@synthesize property = _property;
根据它,它应该创建一个实例变量,只要它创建至少一个访问器方法。那么这是否意味着在我声明属性时没有创建的访问器方法?是什么原因。请解释。
我假设编译器知道NSManagedObjectContext有访问器方法。所以它没有创建任何因此它没有创建实例变量。
答案 0 :(得分:2)
您尚未显示相应.m
文件的代码,但我假设您以编程方式实施了managedObjectContext
属性getter方法。正如文档所说,"编译器将在所有情况下自动合成一个实例变量,在这种情况下,它还合成至少一种存取方法。"但是,如果为readonly
属性提供getter方法的实现,则编译器不会合成任何访问器方法。
答案 1 :(得分:-1)
正如文档所说......如果你为setter或getter提供至少一个访问器方法,它就像告诉编译器一样...不要因为我有一些与setter / getter有关的自定义工作而无法合成这个变量。因此编译器不会自动生成_ivar。如果您需要_ivar,则必须明确指定它,然后继续使用您的客户getter和setter。它是关于Objective C编译器为你做的事情,除非你说不要打扰......我知道我在做什么。