亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

石楼县| 兰西县| 谢通门县| 元江| 晴隆县| 泰宁县| 阿坝| 乌拉特后旗| 开阳县| 长沙市| 台东县| 固镇县| 天等县| 图片| 合肥市| 慈利县| 花莲县| 伊通| 定结县| 安康市| 北川| 兴文县| 千阳县| 桂阳县| 讷河市| 巴马| 日土县| 芦溪县| 平顺县| 潞城市| 镇雄县| 武夷山市| 探索| 田林县| 东港市| 子长县| 定州市| 南京市| 湟中县| 克什克腾旗| 通渭县|