16

ReactiveCocoa フレームワークはweakifystrongifyマクロを使用します。どちらも「@」記号が前に付きます。

例を次に示します (このファイルから)。

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

マクロ名の接頭辞であるアットマークの意味は何ですか? (注: マクロを確認したところ、「@weakify」ではなく「weakify」と呼ばれているため、単なるマクロ名ではありません!)

マクロ自体は次のように定義されています。

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

4

2 に答える 2

18

で始まるマクロには特別な意味はありません@。これは libextobjc で行われ、@weakifyおよび@strongifyマクロが言語の残りの部分でより慣用的に見えるようにします。

技術的には、@はマクロの一部ではありません。マクロは単にweakifyまたはstrongifyです。ただし、マクロの実際の本体は、先頭に . を付けないとコンパイルできないように記述されています@。これは、マクロの先頭に空@autoreleasepool {}を追加することによって行われますが、先頭の@.

于 2013-12-31T18:49:17.133 に答える
7

@マクロの一部ではありません。weakifyと定義されている:

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

したがって、次の@weakify(self)ようになります。

@autorelease {} metamacro_foreach_cxt(ext_weakify_,, __weak, self)
于 2013-12-31T18:49:54.570 に答える