【问题标题】:Why doesn't the managedObjectContext property synthesize its own instance variables ?为什么 managedObjectContext 属性不合成它自己的实例变量?
【发布时间】:2014-10-22 22:12:41
【问题描述】:

appDelegate.h

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

我必须在 appDelegate.m 中这样做

    @synthesize managedObjectContext = _managedObjectContext;

我很困惑,因为根据苹果

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

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

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

【问题讨论】:

    标签: objective-c core-data


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 好吧,你是对的。我在看一个视频教程,错过了getter方法的实现。我以为他们没有添加它。
      猜你喜欢
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      相关资源
      最近更新 更多