diff --git a/Source/ASConfigurationInternal.h b/Source/ASConfigurationInternal.h index 3bad3fd57..eb639c224 100644 --- a/Source/ASConfigurationInternal.h +++ b/Source/ASConfigurationInternal.h @@ -20,7 +20,21 @@ NS_ASSUME_NONNULL_BEGIN * * The delegate will be notified asynchronously. */ -AS_EXTERN BOOL ASActivateExperimentalFeature(ASExperimentalFeatures option); +#if DEBUG +#define ASActivateExperimentalFeature(opt) _ASActivateExperimentalFeature(opt) +#else +#define ASActivateExperimentalFeature(opt) ({\ + static BOOL result;\ + static dispatch_once_t onceToken;\ + dispatch_once(&onceToken, ^{ result = _ASActivateExperimentalFeature(opt); });\ + result;\ +}) +#endif + +/** + * Internal function. Use the macro without the underbar. + */ +AS_EXTERN BOOL _ASActivateExperimentalFeature(ASExperimentalFeatures option); /** * Notify the configuration delegate that the framework initialized, if needed. diff --git a/Source/ASConfigurationInternal.mm b/Source/ASConfigurationInternal.mm index ec2382361..c6c9f6873 100644 --- a/Source/ASConfigurationInternal.mm +++ b/Source/ASConfigurationInternal.mm @@ -12,7 +12,14 @@ #import #import -#define ASGetSharedConfigMgr() (__bridge ASConfigurationManager *)ASConfigurationManager.sharedInstance +NS_INLINE ASConfigurationManager *ASConfigurationManagerGet() { + static ASConfigurationManager *inst; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + inst = [[ASConfigurationManager alloc] init]; + }); + return inst; +} @implementation ASConfigurationManager { ASConfiguration *_config; @@ -21,17 +28,6 @@ @implementation ASConfigurationManager { _Atomic(ASExperimentalFeatures) _activatedExperiments; } -/// Return CFTypeRef to avoid retain/release on this singleton. -+ (CFTypeRef)sharedInstance -{ - static CFTypeRef inst; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - inst = (__bridge_retained CFTypeRef)[[ASConfigurationManager alloc] init]; - }); - return inst; -} - + (ASConfiguration *)defaultConfiguration NS_RETURNS_RETAINED { ASConfiguration *config = [[ASConfiguration alloc] init]; @@ -103,12 +99,12 @@ + (void)test_resetWithConfiguration:(ASConfiguration *)configuration @end -BOOL ASActivateExperimentalFeature(ASExperimentalFeatures feature) +BOOL _ASActivateExperimentalFeature(ASExperimentalFeatures feature) { - return [ASGetSharedConfigMgr() activateExperimentalFeature:feature]; + return [ASConfigurationManagerGet() activateExperimentalFeature:feature]; } void ASNotifyInitialized() { - [ASGetSharedConfigMgr() frameworkDidInitialize]; + [ASConfigurationManagerGet() frameworkDidInitialize]; }