Да, вы можете определить многострочные макросы (используйте \
в конце строки), и макросы могут расширяться до нескольких строк (хотя это технически не нужно, поскольку C / Obj-C игнорирует большинство пробелов).
Но реальный ответ таков: не делайте этого
Эта глобальная функция (а) создаст эквивалентный исходный код в качестве вашего макроса и (б) фактически сгенерирует меньше машинного кода.(Ваш макрос генерирует одни и те же вызовы диспетчеризации снова и снова, в то время как эта функция инкапсулирует их в один блок кода.)
// Shorthand for asynchronously dispatching a block to execute on the main thread
void DispatchOnMain( dispatch_block_t block )
{
dispatch_async(dispatch_get_main_queue(),block);
}
Ваш код будет выглядеть так:
DispatchOnMain(^{
NSLog(@"first line");
NSLog(@"second line");
});