【问题标题】:CoreData model objects in ARC uses retainARK 中的核心数据模型对象使用保留
【发布时间】:2012-06-06 22:30:43
【问题描述】:

当我在 ARC 模式下在 CoreData 中为我的实体创建模型对象时,它会改为生成保留或强保留。那么保留工作并在 ARC 模式下编译吗?我认为在 ARC 模式下我们不能使用 release、autorelease 和 retain 关键字?

【问题讨论】:

  • 嗯,这令人惊讶,没有回应?

标签: core-data automatic-ref-counting


【解决方案1】:

您的意思是它会生成这样的@property 声明吗?

@property (nonatomic, retain) MyObject *object;

retain 属性属性表示 ARC 下的strong

4.1.1. Property declarations

【讨论】:

  • 这很好,但并没有真正回答这个问题,我喜欢这个人使用 ARC 创建了一个项目,并且在将核心数据添加到组合中后,正在生成 NSManagedObjects,其中包含使用保留的属性, 不强。虽然这在 ARC 项目中不应该是合法的,除非另外指定为项目的非 ARC 部分,但这是一个奇怪的事件。应该期望使用强不保留,或者至少编译器应该抱怨它不符合ARC规则......任何其他想法
  • ARC 不禁止使用 retain 关键字。它禁止使用retain 选择器。关键字和选择器完全不同。请参阅我链接的文档的第 7.1.1 节。
【解决方案2】:

请查看此答案:https://stackoverflow.com/a/10036821/662605

它的要点是,如果你 @synthesize 你的属性,那么引擎盖下生成的代码将依赖于 retain 类型(retainassigncopy)。

生成的托管对象子类使用@dynamic 而不是@synthesize,所有这些事情都在为您神奇地发生,所以实际上,尽管令人困惑,但似乎没有使用retain 关键字,因此ARC 是'不要抱怨......我很确定就是这样。

虽然我确实尝试将实现交换为使用 @synthesize 并且仍然没有出错,但我认为我们可以通过链接上的答案找到一些东西

任何其他见解都会很好。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多