CoreData模型对象在ARC中使用retain。

10
当我在使用ARC模式下在CoreData中创建实体的模型对象时,它会生成retain而不是strong。那么retain在ARC模式下也能正常工作和编译吗?我以为在ARC模式下我们不能使用release、autorelease和retain关键字?

这很奇怪,没有回应? - theiOSguy
2个回答

4
请查看这个答案:https://dev59.com/FmLVa4cB1Zd3GeqPvVrJ#10036821 其要点是,如果您使用@synthesize来生成属性,则在幕后生成的代码将依赖于retain类型(retainassigncopy)。
生成的托管对象子类使用@dynamic而不是@synthesize,所有这些都在自动执行,所以实际上,尽管它很令人困惑,似乎并没有使用retain关键字,因此ARC不会报错...我非常确定这就是原因。
虽然我尝试将实现更改为使用@synthesize,但仍未出现错误,但我认为我们可能会从链接中的那个答案中获得一些信息。
任何其他见解都可以。

4
你的意思是它会生成像这样的@property声明吗?
@property (nonatomic, retain) MyObject *object;

retain属性是在ARC下表示strong的属性。

4.1.1. 属性声明


1
很好,但并没有真正回答问题。我像这个人一样使用ARC创建了一个项目,在将Core Data添加到其中后,NSManagedObjects生成的属性使用的是retain而不是strong。虽然在ARC项目中除非另有规定作为非ARC项目的部分,否则不应该是合法的,但这是一个奇怪的情况。应该使用strong而不是retain,或者至少编译器应该抱怨它不符合ARC规则...还有其他想法吗? - Daniel
10
ARC不禁止使用retain关键字,它禁止使用retain选择器。 关键字和选择器是完全不同的概念。请参见我链接的文档中的§7.1.1章节。 - rob mayoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接