如果属性名称以new开头,则应用程序崩溃

时间:2014-01-23 09:40:08

标签: objective-c core-data nsmanagedobject llvm-clang

在我的项目中,我正在使用coredata。其中一个实体有一个名为 newTotal 的属性,在其对应的NSManagedObject类中,属性声明就像

@property (nonatomic, strong) NSString *newTotal;

如果我在NSObject子类中添加这样的属性,XCode将显示错误,如

error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

但是在NSManaged对象子类中,它没有显示错误,但是当访问该属性时应用程序崩溃,类似 EXC_BAD_ACCESS

为什么XCode没有显示错误但应用程序崩溃了?这是XCode / clang / LLVM的错误吗?

我知道它与合成相关的东西。 NSManagedObject子类没有合成其中的属性,但@dynamic指令只是告诉编译器getter和setter方法不是由类本身实现,而是由其他地方实现(如超类或将在运行时提供)。但我对此并不清楚。任何人都可以对问题给出清晰的认识吗?

1 个答案:

答案 0 :(得分:5)

我可以看到你正在使用ARC。

在ARC内存中为您管理,但您自己可以/不得不做的事情很少。您不能将属性命名为“newXxxx”,因为:

https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

您无法为访问者提供以new开头的名称。这反过来意味着你不能,例如,声明一个名称以new开头的属性,除非你指定一个不同的getter:

//无效:

@property NSString *newTitle;

//工作:

@property (getter=theNewTitle) NSString *newTitle;