你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS下單例模式實現(二)利用宏定義快速實現

iOS下單例模式實現(二)利用宏定義快速實現

編輯:IOS開發綜合
在上一節裡提到了用利用gcd快速實現單例模式。   一個項目裡面可能有好幾個類都需要實現單例模式。為了更高效的編碼,可以利用c語言中宏定義來實現。   新建一個Singleton.h的頭文件。   復制代碼 // @interface #define singleton_interface(className) \ + (className *)shared##className;     // @implementation #define singleton_implementation(className) \ static className *_instance; \ + (id)allocWithZone:(NSZone *)zone \ { \     static dispatch_once_t onceToken; \     dispatch_once(&onceToken, ^{ \         _instance = [super allocWithZone:zone]; \     }); \     return _instance; \ } \ + (className *)shared##className \ { \     static dispatch_once_t onceToken; \     dispatch_once(&onceToken, ^{ \         _instance = [[self alloc] init]; \     }); \     return _instance; \ } 復制代碼     這裡假設了實例的分享方法叫 shared"ClassName".   因為方法名 shared"ClassName"是連在一起的,為了讓宏能夠正確替換掉簽名中的“ClassName”需要在前面加上 ##   當宏的定義超過一行時,在末尾加上“\”表示下一行也在宏定義范圍內。   注意最後一行不需要加"\”。       下面就說明下在代碼中如何調用:   這個是在類的聲明裡:   復制代碼 #import "Singleton.h"   @interface SoundTool : NSObject   // 公共的訪問單例對象的方法 singleton_interface(SoundTool)   @end 復制代碼 這個是在類的實現文件中:   類在初始化時需要做的操作可在 init 方法中實現。   復制代碼 @implementation SoundTool   singleton_implementation(SoundTool)   - (id)init {   }   @end
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved