在objective-c中要實現一個單例類,至少須要作如下四個步驟:objective-c
一、爲單例對象實現一個靜態實例,並初始化,而後設置成nil,spa
二、實現一個實例構造方法檢查上面聲明的靜態實例是否爲nil,若是是則新建並返回一個本類的實例,code
三、重寫allocWithZone方法,用來保證其餘人直接使用alloc和init試圖得到一個新實力的時候不產生一個新實例,對象
四、適當實現allocWitheZone,copyWithZone,release和autorelease。it
下面是一個簡單的例子:io
static XYLocationManager *sharedInstance = nil; + (XYLocationManager *)sharedInstance{ static dispatch_once_t predicate; dispatch_once(&predicate, ^{ if (sharedInstance == nil) { sharedInstance = [[self alloc] init]; } }); return sharedInstance; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedInstance == nil) { sharedInstance = [super allocWithZone:zone]; } return sharedInstance; } return nil; } - (id)copyWithZone:(NSZone *)zone { return self; } - (id)init { @synchronized(self) { self = [super init]; return self; } }