objective C之巨集定義實現單例設計模式

2021-07-15 19:19:46 字數 1772 閱讀 2437

singleton.h
// 幫助實現單例設計模式

// .h檔案的實現

#define singletonh(methodname) + (instancetype)shared##methodname;

// .m檔案的實現

#if __has_feature(objc_arc) // 是arc

#define singletonm(methodname) \

static id _instace = nil; \

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

); \

} \return _instace; \

} \\

- (id)init \

); \

return _instace; \

} \\

+ (instancetype)shared##methodname \

\+ (id)copywithzone:(struct _nszone *)zone \ \\

+ (id)mutablecopywithzone:(struct _nszone *)zone \

#else // 不是arc

#define singletonm(methodname) \

static id _instace = nil; \

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

); \

} \return _instace; \

} \\

- (id)init \

); \

return _instace; \

} \\

+ (instancetype)shared##methodname \ \\

- (oneway void)release \ \\

- (id)retain \ \\

- (nsuinteger)retaincount \

\+ (id)copywithzone:(struct _nszone *)zone \

\ \+ (id)mutablecopywithzone:(struct _nszone *)zone \

#endif

使用方法

建立單例類tooluntils 繼承與nsobject

.h

#import #import "singleton.h"

@inte***ce tooluntils : nsobject

singletonh(usertool);

@end

.m

#import "tooluntils.h"

@implementation tooluntils

singletonm(usertool);

@end

測試:

#import "viewcontroller.h"

#import "tooluntils"

@inte***ce viewcontroller ()

@end

@implementation viewcontroller

- (void)viewdidload

優點:面向介面程式設計, 復用性較強. 但由於使用了巨集定義,所以編譯時存在替換的情況存在,在給其它類或物件命名時,注意不要相同.

Objective C 巨集定義 總結

看了一篇講而立之年程式設計師失業的文章,觸動不小,看來以後還是要及時總結。以前總結的東西總是放在本地文件,管理起來不方便,還是老老實實寫部落格吧。使用 define 來定義 1.定義常量 define pi 3.14 巨集定義不要以 結尾 define say hello,there define ...

C之巨集定義

file function line date time define max x,y x y y x 兩數取最大數 define min x,y x y x y 兩數取最小數 define ticks subtract absolute cur,prev cur prev cur prev 0xf...

Objective C的自動提示巨集

define key path obj,keypath void obj.keypath,keypath 用這個巨集可以讓你在輸入巨集的時候有提示功能。巨集定義裡面的 號,會自動把後面的引數變成c語言的字串。這個巨集可以對基本型別進行裝箱操作,對於逗號表示式會取最後乙個值,例如 20,10,2 這個...