我想不出核心数据是指coredata之外的任何东西。所以没有办法有参考周期。最多核心数据对象指向另一个coredata对象。
但是,我可能错了。Managedobjectcontext没有对核心数据的强引用。
这里有指南吗?
答案 0 :(得分:1)
这里有指南吗?
以下是指向Core Data Programming Guide: Object Lifetime Management的链接。
它于2014年7月更新,因此当您提出此问题时,可能会发布新信息。
但是,默认情况下,托管对象与其上下文之间的引用很弱。这意味着通常您不能依赖上下文来确保托管对象实例的寿命,并且您不能依赖托管对象的存在来确保上下文的寿命。换句话说,只是因为你提取了一个对象并不意味着它会留在身边。
此规则的例外是托管对象上下文维护对任何已更改的
的强引用
这意味着您对NSManagedObject子类(核心数据对象)的引用应为strong
。
答案 1 :(得分:1)
我目前也不确定引用是强还是弱。以前的人说他们应该很强大,但后来我发现了这个:
在示例代码中,Apple执行此操作:
@interface DetailViewController : UIViewController
@property (weak) AAAEmployeeMO *employee;
@end
我们倾向于对对象的主键进行强引用,然后在对象为nil时进行延迟初始化的弱属性。像这样;
@interface MyVC : UIViewController
@property (nonatomic, strong) NSString *objectId;
@property (nonatomic, weak) SomeObject *myCoolObject;
@end
@implementation MyVC
- (SomeObject *)myCoolObject {
if (_myCoolObject == nil) {
_myCoolObject = [SomeObject MR_findFirstByAttribute:@"primaryKey" withValue:self.objectId];
}
return _myCoolObject;
}
我仍然不确定这是否是正确的做法。请指正。