有些變量只需要初始化一次(如從文件中讀取配置參數,讀取設備型號等等),可以使用dispatch_once來進行讀取優化,保證只調用API一次,以後就只要直接訪問變量即可
範例如下:
- static BOOL isTestMode;
- + (BOOL)isTestMode
- {
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- NSNumber* obj = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFResourceTest"];
- isTestMode = [obj boolValue];
- });
- return isTestMode;
- }
在軟件工程中,單例是一種用於實現單例的數學概念,即將類的實例化限制成僅一個對象的設計模式。
單例是一種類,該類只能實例化一個對象。
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);
如果被多個線程調用,該函數會同步等等直至代碼塊完成。
+ (AccountManager *)sharedManager {
static AccountManager *sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[self alloc] init];
});
return sharedAccountManagerInstance;
}
AccountManager *accountManager = [AccountManager sharedManager];
AccountManager *accountManager = [[AccountManager alloc] init];