iOS 的單例模式 dispatch_once
有些變量只需要初始化一次(如從文件中讀取配置參數,讀取設備型號等等),可以使用dispatch_once來進行讀取優化,保證只調用API一次,以後就只要直接訪問變量即可.
WeatherClient.h
#import "AFHTTPClient.h"
@interface WeatherClient : AFHTTPClient
+(WeatherClient *)sharedClient;
@end
WeatherClient.m
#import "WeatherClient.h"
@implementation WeatherClient
+(WeatherClient *)sharedClient
{
static WeatherClient *sharedClient=nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken,^{sharedClient =[[WeatherClient alloc] initWithBaseURL:[NSURL URLWithString:API]];
});
return sharedClient;
}
@end
在軟件工程中,單例是一種用於實現單例的數學概念,即將類的實例化限制成僅一個對象的設計模式。
單例是一種類,該類只能實例化一個對象。
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];