巨集定義抽取單例

2021-07-05 20:18:55 字數 1826 閱讀 9133

ios單例設計模式中,我們可以發現,每乙個單例的寫法都是相同的,所以我們可以把他們抽取出來,放在乙個檔案中,當我們要定義乙個單例類的時候,就不用再寫重複的**了.

下面就教大家用巨集定義抽取單例

建立乙個.h檔案,將相同的**用巨集定義定義

singleton.h

// 以後就可以使用inte***cesingleton來替代後面的方法宣告

#define inte***cesingleton(name) +(instancetype)share##name

#if __has_feature(objc_arc)

// arc

#define implementationsingleton(name) \

+ (instancetype)share##name \

\static name *_instance = nil; \

+ (instancetype)allocwithzone:(struct _nszone *)zone \

); \

return _instance; \

} \- (id)copywithzone:(nszone *)zone \

- (id)mutablecopywithzone:(nszone *)zone \

#else

// mrc

#define implementationsingleton(name) \

+ (instancetype)share##name \

\static name *_instance = nil; \

+ (instancetype)allocwithzone:(struct _nszone *)zone \

); \

return _instance; \

} \- (id)copywithzone:(nszone *)zone \

- (id)mutablecopywithzone:(nszone *)zone \

\- (oneway void)release \

\- (instancetype)retain \

\- (nsuinteger)retaincount \

#endif

上面已經將定義單例類的相同**,用巨集定義抽取出來了,下面就開始使用了

我們建立乙個tools的單例類

tools.h

#import #import "singleton.h"

@inte***ce tools : nsobject// share + 當前的類名

//+ (instancetype)sharetools;

inte***cesingleton(tools);

@end

tools.m

#import "tools.h"

@implementation tools

implementationsingleton(tools)

@end

以後我們定義單例的時候就可以這麼的簡單建立,**是不是簡潔多了,下面我們驗證一下

main.m

#import #import "tools.h"

#import "person.h"

int main(int argc, const char * argv)

列印結果:

巨集定義C 單例模式

通用的標頭檔案 巨集定義乙個類實現單例需要做的一些工作。每個單例類最好將其建構函式和虛析構函式設定為private pragma once define singleton declare theclass 標頭檔案類中呼叫 public static theclass snglptr static...

模式 單例 定義為巨集

import inte ce wqperson nsobject 姓名 property nonatomic,strong nsstring name 年齡 property nonatomic,assign nsinteger age instancetype shareperson end im...

C 單例類實現巨集定義

專案中單例類很多的話,每個都要宣告 回比較累贅,所以寫了乙個巨集定義簡介使用 巨集定義如下 define declare sington classname private classname classname classname const classname classname operato...