中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS設計模式之單例模式

發布時間:2020-07-18 01:11:23 來源:網絡 閱讀:344 作者:dragon_cao 欄目:移動開發

1.基本概念

單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例類的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問。

單例設計模式確保對于一個給定的類只有一個實例存在,這個實例有一個全局唯一的訪問點。它通常采用懶加載的方式在第一次用到實例的時候再去創建它。

注意:蘋果大量使用了此模式。例如:[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager],所有的這些方法都返回一個單例對象。


2.單例設計模式的適用情況

如果說創建一個對象會耗費很多系統資源,那么此時采用單例模式,因為只需要一個實例,會節省alloc的時間。

在IOS開發中,如果很多模塊都要使用同一個變量,此時如果把該變量放入單例類,則所有訪問該變量的調用變得很容易,否則,只能通過一個模塊傳遞給另外一個模塊,這樣增加了風險和復雜度

3.單例實例

新建一個接口類Singleton繼承于NSObject:

@interface Singleton : NSObject

+ (Singleton *) sharedInstance;

@end


在實現類中:

@implementation Singleton

//1.

static Singleton * sharedSingleton = nil;

+ (Singleton *) sharedInstance

{

//2.

   if (sharedSingleton == nil) {

       sharedSingleton = [[Singleton alloc] init];

   }

   return sharedSingleton;

}

@end

1.聲明一個靜態變量去保存類的實例,確保它在類中的全局可用性。

2.此方法只會執行一次,執行過后在整個生命周期不再執行,確保只有一個實例。

這種不能排除多線程的時候,同時調用出現的問題,所以為了安全起見我們可以進行改進。有2種思路來解決這一問題。

(1)使用關鍵字@synchronized進行加鎖

@implementation Singleton


static Singleton * sharedSingleton = nil;

+ (Singleton *) sharedInstance

{

   @synchronized(self)if{

   if (sharedSingleton == nil) {

       sharedSingleton = [[Singleton alloc] init];

   }

   return sharedSingleton;

   }

}

@end

(2)使用Dispatch_once,在整個生命周期中,只會調用一次

@implementation Singleton


static Singleton * sharedSingleton = nil;

+ (Singleton *) sharedInstance

{

   static dispatch_once_t once;    

        dispatch_once(&once,^{

        sharedSingleton = [[Singleton alloc] init];

   });

   return sharedSingleton;

}

@end


這樣在常用情況下都可以使用了。但這并不是一個“嚴格”的版本。具體情況參考這篇博文

http://blog.csdn.net/abel_tu/article/details/12836961






向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西安市| 济宁市| 大理市| 自贡市| 苏尼特左旗| 云林县| 洛扎县| 望城县| 衡南县| 广灵县| 晋宁县| 岱山县| 台中市| 上杭县| 格尔木市| 长治市| 富顺县| 巴马| 锦州市| 罗江县| 卓尼县| 浙江省| 柘城县| 砚山县| 久治县| 高台县| 南投市| 怀来县| 赤城县| 晋江市| 枣强县| 武穴市| 大方县| 克东县| 天气| 洛隆县| 三门县| 山东| 临沭县| 渭源县| 平和县|