我們來看看ios的nsassert的定義:
#if !defined(_nsassertbody)
#define nsassert(condition, desc, ...) \
do \
__pragma_pop_no_extra_arg_warnings \
} while(0)
#endif
吊吊的,就是用乙個巨集定義來實現的,那麼我們就不用看太多的內部實現細節,其中 \ 表示續行
同理,我們可以這樣實現乙個objc runtime獲取單例的方式:
#define instance_sdk() class sdkclass = nsclassfromstring(@"exampleclass"); \
sel instancesdksel = nsselectorfromstring(@"sharedplatform"); \
id instancesdk = ((id(*)(id, sel))objc_msgsend)(sdkclass, instancesdksel);
呼叫的時候:
//[[exampleclass instancesdk] login]; 原來的實現方式
instance_sdk()
sel loginsel = nsselectorfromstring(@"sdklogin");
((void(*)(id, sel))objc_msgsend)(instancesdk, loginsel);
這樣實現也是吊吊的,非常清爽。
巨集定義使用技巧
巨集定義使用技巧 1 把列舉值轉換為字串 define caseenum e case e printf e 2 利用二進位制表示式得到編譯期常量 define cat a,b a b cat 1,2 12 3 給標準斷言新增描述性注釋 define assertmsg a,b assert a b...
巨集定義相關技巧
寫乙個 標準 巨集min,這個巨集輸入兩個引數並返回較小的乙個。另外,當你寫下面的 時會發生什麼事 least min p b 解答 define min a,b a b a b min p b 會產生巨集的 剖析 這個面試題主要考查面試者對巨集定義的使用,巨集定義可以實現類似於函式的功能,但是它終...
巨集定義使用技巧
題這幾天面試題會遇到一些關於define 的用法,在這裡做下總結,紅色部分筆試常見題型。1.防止乙個標頭檔案被重複包含 ifndef comdef h define comdef h 標頭檔案內容 endif 2.得到乙個字的高位和地位位元組 define word lo byte word 255...