Question Signification des macros Objective-C préfixés par un symbole (@)


Le framework ReactiveCocoa utilise weakify et strongify les macros, toutes deux précédées d'un symbole "@".

Voici un exemple (De ceci fichier).

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

Quelle est la signification du symbole at qui est un préfixe du nom de la macro? (NOTE: j'ai vérifié la macro, et elle s'appelle "affaiblir", pas "@weakify", donc ce n'est pas juste le nom de la macro!).

La macro elle-même est définie ici:

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


16
2017-12-31 18:44


origine


Réponses:


Il n'y a pas de signification particulière aux macros commençant par @. Ceci est fait dans libextobjc pour faire le @weakify et @strongify les macros semblent plus idiomatiques avec le reste de la langue.

Techniquement, le @ ne fait pas partie de la macro. La macro est juste weakify ou strongify. Le corps réel de la macro, cependant, est écrit de telle sorte qu'il ne sera pas compilé à moins d'être précédé d'un @. Ceci est fait en ajoutant un vide @autoreleasepool {} au début de la macro, mais dépouillant le leader @.


18
2017-12-31 18:49



le @ ne fait pas partie de la macro. weakify est défini comme:

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

Alors @weakify(self) devient:

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

7
2017-12-31 18:49