你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS單例的快速實現

iOS單例的快速實現

編輯:IOS開發綜合

單例模式是iOS常用設計模式中的一種。單例設計模式的作用是使得這個類的一個對象成為系統中的唯一實例,因此需要用一種唯一的方法去創建這個對象並返回這個對象的地址。那麼,我們何時使用單例模式呢?1、類只能有一個實例,而且必須從一個為人熟知的訪問點對其訪問。2、這個唯一的實例只能通過子類化進行擴展,而且擴展的對象不會破壞客戶端代碼。

 

根據線程安全的實現來區分,一種是使用@synchronized ,另一種是使用GCD的dispatch_once函數。

要實現單例,首先需要一個static的指向類本身的對象,其次需要一個初始化類函數。下面是兩種實現的代碼。

1、@synchronized

static InstanceClass *instance;                                                                                                 + (InstanceClass *)defaultInstance{
    @synchronized (self){
        if (instance == nil) {
            instance = [[InstanceClass alloc] init];
        }
    }
    
    return instance;}

2、GCD

static InstanceClass *instance;                                                                                                + (InstanceClass *)defaultInstance{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[InstanceClass alloc] init];
    });
    
    return instance;}

3 綜合:如果項目中用單例比較多,可以利用宏定義實現單例:(1)宏定義單例的聲明和實現方法 (2)在需要用到的object中寫入方法 (3)調用

 

 

 

/**
 * 聲明
 *
 *  @param className 類名
 *
 *  @return 獲得該類的單例
 */

#define DEFINE_SINGLETON_FOR_HEADER(className) 

+ (className *)shared##className;


/**
 *  實現單例
 *
 *  @param className 類名
 *
 *  @return 獲得該類的單例
 */
#define DEFINE_SINGLETON_FOR_CLASS(className) 

+ (className *)shared##className { 
static className *shared##className = nil; 
static dispatch_once_t onceToken; 
dispatch_once(&onceToken, ^{ 
shared##className = [[self alloc] init]; 
}); 
return shared##className; 
}

 

在ClockManager.h文件中聲明

 

@interface ClockManager : NSObject
/**
 *  獲取單例聲明
 */
DEFINE_SINGLETON_FOR_HEADER(GMMobManager);

@end

 

 

在ClockManager.m文件中實現

@implementation ClockManager
DEFINE_SINGLETON_FOR_CLASS(ClockManager);
@end

 

調用

 

[ClockManager sharedClockManager]


 


 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved