1>判斷是否是arc環境:
可以用巨集判斷是否為arc環境
#if __has_feature(objc_arc)
// arc
#else
// mrc
#endif
2>定義巨集的時候字串連線:
// ## : 連線字串和引數
#define singleton_h(name) + (instancetype)shared##name;
1>在arc和mrc環境下單例的巨集實現:
// #
# : 連線字串和引數
#define singleton_h(name) + (instancetype)shared#
#name;
#if __has_feature(objc_arc) // arc
#define singleton_m(name) \
static id _instance; \
+ (id)allocwithzone:(struct _nszone *)zone \
); \
return _instance; \}\
\+ (instancetype)shared#
#name \
) return _instance; \}\
+ (id)copywithzone:(struct _nszone *)zone \
#else // 非arc
#define singleton_m(name) \
static id _instance; \
+ (id)allocwithzone:(struct _nszone *)zone \
); \
return _instance; \}\
\+ (instancetype)shared#
#name \
); \
return _instance; \}\
\- (oneway void)release \\\
- (id)autorelease \\\
- (id)retain \\\
- (nsuinteger)retaincount \\\
+ (id)copywithzone:(struct _nszone *)zone \
#endif
使用巨集來實現單例模式
單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。如果有很多地方需要使用到單例模式,則可以改用...
iOS使用巨集寫單例
本文只介紹arc情況下的單例 過去一直背不下來單例如何寫,就是知道這麼回事,也知道通過巨集來寫單例,但是一直記不住,今天就來記錄一下 void viewdidload建立person,列印,實際上是2個物件。沒毛病.建立方法 import siperson.h static siperson ins...
iOS單例巨集
define singletonh methodname instancetype shared methodname if has feature objc arc 是arc define singletonm methodname else 不是arc define singletonm met...