標籤:
單例設計模式是ios開發中幾大設計模式之一,每個項目中必有單例。下面我用文字加代碼的方式講一下單例模式。
1.我們簡單的建立一個單例類
#import <Foundation/Foundation.h>
@interface SingloneTest : NSObject
+ (id)shareInstance;
@end
#import "SingloneTest.h"
@implementation SingloneTest
+ (id)shareInstance
{
static id shareInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[NSObject alloc] init];
});
@end
2.在appdelegate中,這樣寫
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);
return YES;
}
列印結果:
SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~
3.在控制器裡再次建立單例類
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"~~~~%@~~~~~~",[SingloneTest shareInstance]);
}
列印結果:
SingloneDomo[5469:104528] ~~~~<NSObject: 0x7fff32e0d560>~~~~~~
兩次的列印結果相同,證明是一個對象執行個體,所以在整個工程中,單例可以跳過多個控制器,記錄自己的狀態,不需要逐個頁面進行傳值。
有同學問,問什麼這樣建立的單例,在方法執行結束沒有被銷毀呢?因為 static id shareInstance; static把單例對象指標放在了靜態儲存區,使資料持久化,程式開始就進行初始化,且只初始化一次,不隨runtime機制進行銷毀。所以每次調用+ (id)shareInstance; 方法,其實都是取同一個SingloneTest對象。
ios筆記-單例文字代碼詳解