//WeakObject 用法:WeakObj(self) 自动生成一个selfWeak
#define WeakObj(o) __weak typeof(o) o##Weak = o;
在项目中看到这样的宏定义,不明白是怎么回事,查了一些资料终于明白了。
标记粘贴运算符(##)
宏定义内的标记粘贴运算符(##)会合并两个参数。
字符串常量化运算符(#)
在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。
将上面的宏定义展开,结果是:
__weak typeof(self) selfWeak = self;
//使用弱饮用,防止出现循环引用,造成内存泄漏。
下面的代码也使用了##,使用带参数的宏就能够快速的定义一个类,感觉很方便。
#define TestClass(req_name, field_name) \
class CCY##req_name : public CCYTraderApi \
{ \
public: \
CCY##req_name(CCYTestCaseCfg::CCYTestCase* pCase); \
protected: \
virtual bool Test(void); \
virtual void UpdateParameter() {}; \
private: \
vector<CCY##field_name##Field> m_Req; \
CCYTestCaseCfg::CCYTestCase* m_pCase; \
};
参考: