我想不出核心數據是指coredata以外的任何東西。所以沒有辦法會有參考循環。至多核心數據對象指向另一個coredata對象。應該引用核心數據對象強還是弱?
但是,我可能是錯的。
Managedobjectcontext不具有對核心數據的強烈參考。
這裏有任何指導嗎?
我想不出核心數據是指coredata以外的任何東西。所以沒有辦法會有參考循環。至多核心數據對象指向另一個coredata對象。應該引用核心數據對象強還是弱?
但是,我可能是錯的。
Managedobjectcontext不具有對核心數據的強烈參考。
這裏有任何指導嗎?
這裏有任何指導嗎?
這裏是鏈接到Core Data Programming Guide: Object Lifetime Management。
它已於2014年7月更新,因此在您提出此問題時可能沒有新的信息發佈。
但是,默認情況下,託管對象與其上下文之間的引用很弱。這意味着一般情況下,不能依賴上下文來確保託管對象實例的長久性,並且不能依賴託管對象的存在來確保上下文的長久性。換句話說,只是因爲你提取了一個對象並不意味着它會停留在左右。
的例外是在託管對象上下文保持着強勁的參考任何改變
這意味着NSManagedObject子類的引用(核心數據對象)應strong
。
我目前還不確定引用是強還是弱。前面的人說,他們應該是很強的,但後來我發現這:
在示例代碼,蘋果做到這一點:
@interface DetailViewController : UIViewController
@property (weak) AAAEmployeeMO *employee;
@end
我們傾向於做的是有對該對象的主鍵的強引用,然後是一個弱對象,如果該對象爲零,則執行延遲初始化。喜歡這個;
@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;
}
我仍然不確定這是否是正確的方式。請糾正我。
請說明一下:你是否關心上下文中對象的「內部」保留週期,或者是否關心上下文中對象的「外部」引用? – 2013-05-10 09:48:02
內部保留週期內的上下文?這完全由核心數據來管理。我的代碼外部引用到上下文中的對象是我關心的。 – 2013-05-10 09:55:18