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.