1
運行我有一個屬性:物業延遲初始化VS核心數據在主線程
@property (strong, nonatomic) NSArray *emails;
和懶惰初始化它
- (NSArray *) emails
{
if (_emails == nil) {
CoreDataElement* cde = [user grabCoreDataElement];
_emails = [cde.emails allObjects];
}
return _emails;
}
代碼審查期間
然而有人指出,訪問核心數據應該在主線程中完成。
所以我在修改初始化至在想:
- (NSArray *) emails
{
if (_emails == nil) {
if (NSThread isMainThread])
{
CoreDataElement* cde = [user grabCoreDataElement];
_emails = [cde.emails allObjects];
}
else
{
__block NSArray *result = nil;
dispatch_sync(dispatch_get_main_queue(), ^{
result = self.emails;
});
return result;
}
}
return _emails;
}
所以我的問題是:
- (1)有必要的MainThread執法?
- (2)上述代碼是處理延遲初始化程序和核心數據對象訪問的規範方法嗎?