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)上述代码是处理延迟初始化程序和核心数据对象访问的规范方法吗?