iOS語言中的單例模式

什麼是單例,爲何須要單例?函數

單例模式的做用就是解決「應用中只須要一個實例」的問題。spa

當咱們須要一個類,而不太關注這個「類」自己的時候,例如iOS設備都有一個重力類UIAccelerometer,其實對於用戶,只須要這個類的某些方法,好比實時獲取數據,獲取x,y,z軸的狀態等。因此這個類只須要一個實例就夠了,更多的實例只會佔用更多的內存空間而已。code

 

 

實際應用中的單例對象

首先在我接觸到的公司項目中,使用到的一個單例狀況就是記錄全部NSUserDefaults信息的單例PCSetting。NSUserDefaults自己就是一個單例,是iOS提供的輕量級數據持久化保存的類。blog

對於一個單例的建立,咱們須要:繼承

 

1.建立一個繼承於NSObject的類,而且在.h中聲明一個類方法生命週期

@interface PCSettings : NSObject

+ (PCSettings*)sharedSettings;

 

2.在.m文件中分別建立一個靜態變量,實現sharedSettings方法,以及重寫init方法事件

static PCSettings *g_sharedSettings = nil;

+ (PCSettings *)sharedSettings
{
    if (g_sharedSettings == nil)
    {
        g_sharedSettings = [[PCSettings alloc] init];
    }
    
    return g_sharedSettings;
}

- (id)init
{
    self = [super init];
    if (self != nil) {
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
            hub_userId = [[prefs objectForKey:KEY_HubUserID] copy];
       .
       .
       .
    }
    return self;
}    

如此就完成了一個單例的建立啦。內存

 

 

另外一種經過GCD建立單例的方法資源

+ (PCSettings *)sharedSettings
{
    static dispatch_once_t once;
    dispatch_once(&once, ^{
         g_sharedSettings = [[self alloc]init];
    }
    return g_sharedSettings;
}

在上述代碼中,dispatch_once函數就是由GCD提供的,它的做用是在整個應用程序生命週期中只執行一次代碼塊中的內容。dispatch_once可以記錄該代碼塊是否被調用過。

 

 

Objective-C語法中的其餘單例類

1.UIApplication

此類經過應用程序委託對象來響應低內存,應用啓動,後臺運行和應用終止等事件。

+ sharedApplication 建立

 

2.NSUserDefaults

輕量級數據存儲類

+ standardUserDefaults 建立

 

3.NSNotificationCenter

採用觀察者模式的通知機制

+ defaultCenter 建立

 

4.NSFileManager

提供了訪問文件系統的通用操做,能夠定位,建立,複製文件和文件夾

+ defaultManager 建立

 

5.NSBundle

操做本地資源,訪問文件系統等功能

+ mainBundle 建立

相關文章
相關標籤/搜索