IOS開發筆記——單例模式
由java轉入IOS開發了,自學配合實際項目記錄一些項目中用到的技巧,APP比較小,涉及到的知識點比較簡單,大牛就不用看了,小兵大家一起討論。單例模式就是確保在程式運行過程中,一個類只有一個執行個體,公司的APP的帳號管理是通過單例實現的。先上代碼:
@interface JVAccountManager : NSObject
+ (JVAccountManager *)sharedAccount;
@end
@implementation JVAccountManager
+ (JVAccountManager *)sharedAccount
{
static JVAccountManager *sharedAccountManager;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedAccountManager = [[JVAccountManager alloc] init];
});
return sharedAccountManager;
}
@end
這是我們公司的實現方法,網上可以查到其他實現方法,但是要重寫一些方法保證執行個體的唯一性,比如allocWithZone,copyWithZone,這裡不贅述,我貼出來的是代碼最簡潔的實現方法;
比較陌生的是dispatch_once這個方法,這個方法其實就是為了保證執行個體的唯一性。這個方法是display_once,GCD(Grand Central Dispatch)中提供的方法,根據IOS編程這本書裡面的解釋,是一種低級的對NSOperation和NSOperationQueue的類比,使用Objective-C block。其實我不是很清楚這一塊,以後的文章中再分析吧。需要明白的是dispach_once函數中的代碼塊只會被執行一次,而且還是安全執行緒的。
void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);其中第一個參數predicate,該參數是檢查後面第二個參數所代表的代碼塊是否被調用的謂詞,第二個參數則是在整個應用程式中只會被調用一次的代碼塊;
在這個程式中擷取這個唯一執行個體的方法:JVAccountManager *sharedAccountManager = [JVAccountManager sharedAccount];