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 這個...