当我让 Xcode 自动为数据模型中的实体创建类文件时,我指定的任何属性Boolean
都会在属性声明中获取 NSNumber 类型:
@property (nonatomic, retain) NSNumber * isGood;
由于我使用的是 ARC,不应该是strong
而不是retain
吗?
可能发生这种情况是因为Boolean
无法转换为对象。那是对的吗?如果是这样,我如何使用应该具有布尔值的属性?
当我让 Xcode 自动为数据模型中的实体创建类文件时,我指定的任何属性Boolean
都会在属性声明中获取 NSNumber 类型:
@property (nonatomic, retain) NSNumber * isGood;
由于我使用的是 ARC,不应该是strong
而不是retain
吗?
可能发生这种情况是因为Boolean
无法转换为对象。那是对的吗?如果是这样,我如何使用应该具有布尔值的属性?
是的,NSNumber
被用作BOOL
不是一个对象。CGFloat
等等也一样NSInteger
。
从使用中获取BOOL
价值。NSNumber
[myNSNumber boolValue];
为核心数据模型生成类时,有一个复选框“使用原始类型的标量属性”。如果您选择它,它将为您的布尔属性使用 BOOL 类型。由于现在使用的是原始类型,因此它也不会在声明中包含任何保留(或强)关键字。
我已经阅读了 maxedison 和 Tim Dean 之间的转换,并且我已经仔细检查了它。事实证明,蒂姆可能是不对的。您必须实现 getter 和 setter。
您可以将属性声明为标量值,但对于标量值,Core Data 不能动态生成访问器方法——您必须提供自己的实现
以及利弊(在同一个文件中):
允许 Core Data 管理自己的存储的优势通常超过直接与标量值交互的任何优势,尽管如果您怀疑这不适用于您的应用程序,您应该使用性能分析工具进行检查。