objective-c macros reactive-cocoa

objective c - Significado de las macros de Objective-C con el símbolo at(@)



reactive-cocoa (2)

El marco de ReactiveCocoa hace uso de macros weakify y strongify , las cuales están precedidas por un símbolo ''@''.

Aquí hay un ejemplo (de este file ).

- (RACSignal *)rac_textSignal { @weakify(self); return [[[[RACSignal ... ]; }

¿Cuál es el significado del símbolo at que es un prefijo del nombre de macro? (NOTA: He comprobado la macro y se llama ''debilitar'', no ''@weakificar'', por lo que no es solo el nombre de la macro).

La macro en sí se define aquí:

https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/EXTScope.h#L45


El @ no es parte de la macro. weakify se define como:

#define weakify(...) / autoreleasepool {} / metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__)

Así que @weakify(self) convierte en:

@autorelease {} metamacro_foreach_cxt(ext_weakify_,, __weak, self)


No hay un significado especial para las macros que comienzan con una @ . Esto se hace en libextobjc para que las macros @weakify y @strongify parezcan más idiomáticas con el resto del idioma.

Técnicamente, el @ no es parte de la macro. La macro es solo weakify o strongify . El cuerpo real de la macro, sin embargo, está escrito de tal manera que no se compilará a menos que esté precedido por un @ . Esto se hace agregando un @autoreleasepool {} vacío @autoreleasepool {} al comienzo de la macro, pero eliminando el @ principal.