由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];