3

我想不出核心数据指的是核心数据之外的任何东西。所以不可能有引用循环。最多核心数据对象指向另一个核心数据对象。

但是,我可能错了。

Managedobjectcontext 不持有对核心数据的强引用。

这里有指南吗?

4

2 回答 2

1

这里有指南吗?

这是核心数据编程指南的链接:对象生命周期管理

它于 2014 年 7 月更新,因此当您提出此问题时,它可能包含未发布的新信息。

但是,默认情况下,托管对象与其上下文之间的引用是弱的。这意味着通常您不能依靠上下文来确保托管对象实例的寿命,也不能依靠托管对象的存在来确保上下文的寿命。换句话说,仅仅因为你获取了一个对象并不意味着它会一直存在

此规则的例外是托管对象上下文维护对任何更改的强引用

这意味着您对 NSManagedObject 子类(核心数据对象)的引用应该是strong.

于 2014-09-05T16:18:19.400 回答
1

我目前也不确定引用应该是强还是弱。以前的家伙说他们应该坚强,但后来我发现了这个:

https://developer.apple.com/library/prerelease/watchos/documentation/Cocoa/Conceptual/CoreData/CoreDataandStoryboards.html#//apple_ref/doc/uid/TP40001075-CH10-SW1

在示例代码中,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; 
} 

我仍然不确定这是否是正确的做法。请纠正我。

于 2015-10-22T01:14:14.673 回答