【发布时间】:2014-01-03 07:31:45
【问题描述】:
我有一个单例名称CoreDataManager,其中注册了mergeContextChangesForNotification:
+ (id) sharedManager{
static CoreDataManager *mSharedManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
mSharedManager = [[CoreDataManager alloc] init];
});
return mSharedManager;
}
- (id)init
{
self = [super init];
if (self) {
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeContextChangesForNotification:)
name:NSManagedObjectContextDidSaveNotification
object:nil];
});
}
return self;
}
收到通知后:
- (void)mergeContextChangesForNotification:(NSNotification *)notification {
[shareContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
}
我有两个问题:
- 我应该在这里使用
performSelectorOnMainThread吗?因为this answer 说从不。我应该将其更改为 GCD 并使用dispatch_get_main_queue?? - 在
init中注册mergeContextChangesForNotification是确保通知始终在主线程中注册的好习惯吗?我从this answer读到的
【问题讨论】:
标签: ios core-data thread-safety singleton