2013-05-10 63 views
3

我想不出核心數據是指coredata以外的任何東西。所以沒有辦法會有參考循環。至多核心數據對象指向另一個coredata對象。應該引用核心數據對象強還是弱?

但是,我可能是錯的。

Managedobjectcontext不具有對核心數據的強烈參考。

這裏有任何指導嗎?

+0

請說明一下:你是否關心上下文中對象的「內部」保留週期,或者是否關心上下文中對象的「外部」引用? – 2013-05-10 09:48:02

+0

內部保留週期內的上下文?這完全由核心數據來管理。我的代碼外部引用到上下文中的對象是我關心的。 – 2013-05-10 09:55:18

回答

1

這裏有任何指導嗎?

這裏是鏈接到Core Data Programming Guide: Object Lifetime Management

它已於2014年7月更新,因此在您提出此問題時可能沒有新的信息發佈。

但是,默認情況下,託管對象與其上下文之間的引用很弱。這意味着一般情況下,不能依賴上下文來確保託管對象實例的長久性,並且不能依賴託管對象的存在來確保上下文的長久性。換句話說,只是因爲你提取了一個對象並不意味着它會停留在左右。

的例外是在託管對象上下文保持着強勁的參考任何改變

這意味着NSManagedObject子類的引用(核心數據對象)應strong

1

我目前還不確定引用是強還是弱。前面的人說,他們應該是很強的,但後來我發現這:

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

在示例代碼,蘋果做到這一點:

@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; 
} 

我仍然不確定這是否是正確的方式。請糾正我。