1. 程式人生 > >iOS 建立單例的三種方法

iOS 建立單例的三種方法

什麼是單例?
答:單例的意思就是一個例項,單例是全域性都可以使用的唯一的一個類
系統單例都有哪些?
答:UIApplication(應用程式例項)
NSFileManager(檔案管理):
NSUserDefaults(應用程式設定):
UIScreen

自定義一個單例:繼承與 NSObject
在.h檔案裡宣告單例方法
@interface Singleton : NSObject

  • (instancetype)shareSingleton;

@end

pragma mark -方法1 傳統方法

  • (instancetype)shareSingleton{
    //為什麼用static修飾:用static修飾,這個方法只走一次
    static Singleton *singleton = nil;
    if (singleton == nil){
    singleton = [[Singleton alloc] init];
    //self在+號方法裡 代表當前類
    [singleton creatStudentDic];
    }
    return singleton;
    }

pragma mark -方法2 執行緒方法(最佳方法)

  • (instancetype)shareSingleton{
    static Singleton *singleton = nil;
    //給單例加了一個執行緒鎖
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    singleton = [[Singleton alloc] init];
    });
    return singleton;

pragma mark -方法3 系統執行緒加鎖(不建議使用)

  • (instancetype)shareSingleton{
    static Singleton *singleton = nil;
    @synchronized(self) {
    singleton = [[Singleton alloc] init];
    }
    return singleton;
    }

相關推薦

iOS 建立方法

什麼是單例? 答:單例的意思就是一個例項,單例是全域性都可以使用的唯一的一個類 系統單例都有哪些? 答:UIApplication(應用程式例項) NSFileManager(檔案管

iOS開發(Swift):建立UINavigationView的方法

UINavigationController是iOS開發中很常用的一種元件,由於種種原因許多人喜歡從程式碼建立檢視控制元件,包括UINavigationController,但是有時候我們的螢幕控制元件太多,一方面使用storyboard可以方便設計,但是另一方面又需要用程式碼建立UINavi

iOS 建立方法 dispatch_once

單例的運用場景是:一種類,該類只能例項化一個物件。 iOS 建立單例的方法有:dispatch_once 舉例如下 假如有個全域性的狀態類,該類的介面部分如下: @interface GlobalState () @end 該類的實現: @implementati

JS建立物件的方法

JS建立物件的三種方法 工廠模式: function person(name,age,job){ var obj = new Object(); obj.name = name; obj.age = age; obj.sayName = function(){ alert

JavaScript - 建立物件的方法

一.  構造器建立:var objName = new Object() 1.屬性(新增屬性:物件名.屬性名 = 屬性值   訪問屬性:物件名.屬性名)   2.方法(新增方法:物件名.方法名 = function ( )

ios建立中的@synchronized和dispatch_once

@synchronized和dispatch_once 在單例的使用如下: static LvSingleClass * singleClass = nil; + (LvSingleClass *)sharedSingleClass { static dispatch_once

Linux軟體安裝——mysql5.7-安裝新手入門 6、MySQL建立使用者的方法

因測試工作需要,在Linux上自搭一個mysql服務。 但對入門linux的同志,剛開始最迫切想知道的,大概一個是中文輸入法,另一個就是怎麼安裝軟體。本文主要學習了LINUX安裝軟體的特點,並完成安裝mysql的安裝作為實踐。 一、Linux軟體安裝須知: &

React建立元件的方法

無狀態函式式元件 建立純展示元件,只負責根據傳入的props 來展示,不涉及到要state 狀態的操作,是一個只帶有一個render 方法的元件類 建立形式如下: function HelloComponent(props) { return <div>Hello {

c++ 建立物件的方法

c++有三種方法建立物件 結合程式碼來看 1 #include <iostream> 2 using namespace std; 3 class Test { 4 5 private: 6 public:

Spark建立DataFrame的方法

跟關係資料庫的表(Table)一樣,DataFrame是Spark中對帶模式(schema)行列資料的抽象。DateFrame廣泛應用於使用SQL處理大資料的各種場景。建立DataFrame有很多種方法,比如從本地List建立、從RDD建立或者從源資料建立,下面簡要介紹建立DataFrame的三種方

Spring建立物件的方法之一建構函式建立(原始碼)

Spring建立物件有三種方法,分別是: 1、建構函式建立 2、靜態工廠方法 3、例項工廠方法 這裡說下第一種方法,採用建構函式來建立,我這裡直接給原始碼,湊合著看看,能用就可以了,如果想要更深入的瞭解,那麼只有自己去找資料了。 第一個類:D1.java pa

mysql建立使用者的方法

一、賬號名稱的構成方式 賬號的組成方式:使用者名稱+主機(所以可以出現重複的使用者名稱,跟其他的資料庫不一樣) 使用者名稱:16字元以內. 主機名:可以用主機名和IP地址,也可以用萬用字元 萬用字元說明:172.18.10.%(IP地址為172.18.1

JavaScript裡建立物件的方法

JavaScript把幾乎一切都當做物件,因此語言中所有的元素都可以被建立、賦予屬性以及被連結到原型鏈中。僅有的例外是null和undefined。在JavaScript中物件是被創建出來的,它們不是憑空產生的。1. 物件字面量字面量語法可以用內聯的方式描述一個物件,外面有一

iOS 建立

#import "SingleInstance.h" @interface SingleInstance ()<NSCopying,NSMutableCopying> @end //定義一個當前單例物件的一個例項,並賦值為nil static

iOS延遲執行的方法

    第一種: [selfperformSelector:@selector(afterDelayMethod) withObject:selfafterDelay:3]; 第二種: //[NSThread sleepForTimeInterval:3];//主執行緒沉睡

[iOS 繪製虛線] 轉: iOS 繪製虛線的方法

方法一:通過Quartz 2D 在 UIView drawRect:方法進行繪製虛線 - (void)drawRect:(CGRect)rect { // 可以通過 setNeedsDisplay 方法呼叫 drawRect: // Dra

JavaScript基礎-----建立物件的方法

在 JavaScript 中我們知道無法通過類來建立物件,那麼如何建立物件呢? (1)通過“字面量”方式建立物件 將你的資訊寫到{ }中,並賦值給一個變數,此時這個變數就是一個物件,例: var game = { first : "吃雞", two :

iOS 繪製虛線的方法

方法一:通過Quartz 2D 在 UIView drawRect:方法進行繪製虛線- (void)drawRect:(CGRect)rect { // 可以通過 setNeedsDisplay 方法呼叫 drawRect: // Drawing code

建立圖的方法(鄰接矩陣+鄰接表+十字連結串列)

一、鄰接矩陣 採用矩陣的方式來描述圖中的連線各非連線關係,若不能連上用無窮大或者0來表示,但是如果邊很稀少,頂點很多,那麼將會有很大的浪費。同時,這個矩陣可以同時刻畫有向圖和無向圖,無向圖就是把有向圖根據對角線對稱即可。 1、思想:建立一個結構體,它包含

iOS建立的兩方式

剛剛開始做iOS開發的時候,不知道怎麼建立單例,在網上搜的也大多數都不太全,所以總結了一下建立單例的兩種方式 首先在.h檔案中宣告類方法 1 +(instancetype)sharedUtils; 然後在.m檔案中實現它,實現的方法有兩種 第一種,在建立一個物件