fix dispatch-thread pattern
1. Always bail early if in IB. 2. Always run on main thread if not already. 3. THEN dispatch_once to create the static instance.
This commit is contained in:
@@ -14,28 +14,28 @@
|
||||
|
||||
@implementation MGLAccountManager
|
||||
|
||||
static MGLAccountManager *_sharedManager;
|
||||
|
||||
// Can be called from any thread.
|
||||
//
|
||||
+ (instancetype) sharedManager {
|
||||
if (NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) {
|
||||
return;
|
||||
}
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
if ( ! NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) {
|
||||
void (^setupBlock)() = ^{
|
||||
_sharedManager = [[self alloc] init];
|
||||
_sharedManager.mapboxMetricsEnabledSettingShownInApp = NO;
|
||||
};
|
||||
if ( ! [[NSThread currentThread] isMainThread]) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
setupBlock();
|
||||
});
|
||||
}
|
||||
else {
|
||||
setupBlock();
|
||||
}
|
||||
}
|
||||
});
|
||||
static MGLAccountManager *_sharedManager;
|
||||
void (^setupBlock)() = ^{
|
||||
dispatch_once(&onceToken, ^{
|
||||
_sharedManager = [[self alloc] init];
|
||||
_sharedManager.mapboxMetricsEnabledSettingShownInApp = NO;
|
||||
});
|
||||
};
|
||||
if ( ! [[NSThread currentThread] isMainThread]) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
setupBlock();
|
||||
});
|
||||
}
|
||||
else {
|
||||
setupBlock();
|
||||
}
|
||||
return _sharedManager;
|
||||
}
|
||||
|
||||
|
||||
@@ -279,25 +279,24 @@ const NSTimeInterval MGLFlushInterval = 60;
|
||||
// public class convenience methods. May return nil if this feature is disabled.
|
||||
//
|
||||
+ (instancetype)sharedManager {
|
||||
if (NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) {
|
||||
return;
|
||||
}
|
||||
static dispatch_once_t onceToken;
|
||||
static MGLMapboxEvents *_sharedManager;
|
||||
dispatch_once(&onceToken, ^{
|
||||
if (NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent) {
|
||||
return;
|
||||
}
|
||||
|
||||
void (^setupBlock)() = ^{
|
||||
void (^setupBlock)() = ^{
|
||||
dispatch_once(&onceToken, ^{
|
||||
_sharedManager = [[self alloc] init];
|
||||
};
|
||||
if ( ! [[NSThread currentThread] isMainThread]) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
setupBlock();
|
||||
});
|
||||
}
|
||||
else {
|
||||
});
|
||||
};
|
||||
if ( ! [[NSThread currentThread] isMainThread]) {
|
||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||
setupBlock();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
else {
|
||||
setupBlock();
|
||||
}
|
||||
return _sharedManager;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user