iOS 單例用法

單例模式的意思就是隻有一個實例。單例模式確保某一個類只有一個實例,並且自行實例化並向整個系統提供這個實例。這個類稱爲單例類。objective-c

1.單例模式的要點:ui

  顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行建立這個實例;三是它必須自行向整個系統提供這個實例。spa

2.單例模式的優勢:對象

  1.實例控制:Singleton 會阻止其餘對象實例化其本身的 Singleton 對象的副本,從而確保全部對象都訪問惟一實例。
  2.靈活性:由於類控制了實例化過程,因此類能夠更加靈活修改實例化過程
IOS中的單例模式
  在objective-c中要實現一個單例類,至少須要作如下四個步驟:
  一、爲單例對象實現一個靜態實例,並初始化,而後設置成nil,
  二、實現一個實例構造方法檢查上面聲明的靜態實例是否爲nil,若是是則新建並返回一個本類的實例,
  三、重寫allocWithZone方法,用來保證其餘人直接使用alloc和init試圖得到一個新實力的時候不產生一個新實例,
  四、適當實現allocWitheZone,copyWithZone,release和autorelease。
下面以Uility爲例子:

staticUility *uility = nil;//第一步,寫一個靜態的對象,並置爲空it

+(Uility *)sharedUility{class

    @synchronized(self){變量

        if (uility == nil) {   //第二步,,,判斷爲空,而後建立。object

            uility = [[Uility alloc] init];方法

        }static

    }

    return uility;

    

}

+ (id) allocWithZone:(NSZone *)zone //第三步:重寫allocWithZone方法,防止其餘人直接用alloc init方法建立一個新的實例

{

    @synchronized (self) {

        if (uility == nil) {

            uility = [super allocWithZone:zone];

            return uility;

        }

    }

    returnnil;

}

- (id) copyWithZone:(NSZone *)zone //第四步   防止其餘人直接用copy方法建立一個新的實例

{

    returnself;

}

 

- (id) retain

{

    returnself;

}

- (unsigned) retainCount

{

    returnUINT_MAX;

}

- (oneway void) release

{

    

}

- (id) autorelease

{

    returnself;

}

- (id)init

{

    @synchronized(self) {

        [superinit];//每每放一些要初始化的變量.

        return self;

    }

}

相關文章
相關標籤/搜索