91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

六盘水市| 赤峰市| 邯郸县| 云林县| 根河市| 石柱| 青铜峡市| 揭阳市| 常熟市| 陇南市| 雷州市| 新巴尔虎右旗| 石阡县| 凤台县| 台东县| 沈阳市| 通渭县| 阿荣旗| 洪洞县| 阜阳市| 上高县| 昭通市| 永昌县| 隆尧县| 宽城| 共和县| 奉节县| 永兴县| 肥城市| 松江区| 马边| 濮阳县| 秦皇岛市| 浪卡子县| 平南县| 洮南市| 卢龙县| 通海县| 邢台县| 长寿区| 商洛市|