Block相關(guān)宏定義

以下宏定義摘抄自:GUNStep

#define BLOCK_SCOPE __block

/**
 * Defines a block type.  Will work whether or not the compiler natively
 * supports blocks.
 */
#define DEFINE_BLOCK_TYPE(name, retTy, argTys, ...) \
typedef retTy(^name)(argTys, ## __VA_ARGS__)

#define DEFINE_BLOCK_TYPE_NO_ARGS(name, retTy) \
typedef retTy(^name)()


/**
 * Calls a block.  Works irrespective of whether the compiler supports blocks.
 */
#define CALL_BLOCK(block, args, ...) block(args, ## __VA_ARGS__)

/**
 * Calls a block without arguments.
 */
#define CALL_BLOCK_NO_ARGS(block) block()


#define DEFINE_BLOCK_TYPE_STRUCT(name, retTy, argTys, ...) \
typedef struct {\
void *isa;\
int flags;\
int reserved;\
retTy (*invoke)(void*, argTys, ## __VA_ARGS__);\
} *name

#define DEFINE_BLOCK_TYPE_NO_ARGS_STRUCT(name, retTy) \
typedef struct {\
void *isa;\
int flags;\
int reserved;\
retTy (*invoke)(void*);\
} *name

#define CALL_BLOCK_STRUCT(block, args, ...) block->invoke(block, args, ## __VA_ARGS__)

#define CALL_BLOCK_NO_ARGS_STRUCT(block) block->invoke(block)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 宏定義在C系開發(fā)中可以說占有舉足輕重的作用。底層框架自不必說,為了編譯優(yōu)化和方便,以及跨平臺能力,宏被大量使用,可...
    你好自己閱讀 1,061評論 0 5
  • 寫在前面 在開發(fā)過程中很多時候需要閱讀第三方源碼,但是里面有大量的宏。沒有換行,沒有著色,與平時寫的代碼完全不同,...
    走進科學閱讀 729評論 0 2
  • 轉(zhuǎn)載自O(shè)neV's Den 的宏定義的黑魔法 - 宏菜鳥起飛手冊 講的太詳細了,就像老師一樣,不是在講方法,而是在...
    廚子閱讀 542評論 0 0
  • 前言 在ReactiveCocoa 中,開源庫作者為我們提供了很多種魔法,“黑”魔法,“紅”魔法……今天就讓先來看...
    一縷殤流化隱半邊冰霜閱讀 9,073評論 20 97
  • 1 昨天和朋友在街上走著,突然聽到一記刺耳的剎車聲,我朝四周看看,發(fā)現(xiàn)路邊停著一輛出租車,一對兒情侶被嚇得驚魂未定...
    上單亮子閱讀 706評論 0 1