1

Xcode で「[NSArray arrayWith」と入力し始めると、次のヒントが表示されます。

id arrayWithObjects:(id), ..., nil

ご覧のとおり、ターミネータは明示的です。

可変引数をとるメソッドを自分で書くと、こんなヒントが得られる

id myMethod:(id), ...

(ターミネータは表示されません)。使用したいターミネーターをヒントするにはどうすればよいですか?

4

1 に答える 1

1

適用する

__attribute__((sentinel))

属性を可変引数メソッドに追加するか、代わりに

NS_REQUIRES_NIL_TERMINATION

同じマクロに展開されます。このようにして、コンパイラは、可変引数リストを 0 で終了する必要があることを認識します。

- (void)foo:(id)arg1, ... NS_REQUIRES_NIL_TERMINATION
{
    va_list args;
    va_start(args, arg1);
    // ...
}
于 2013-06-12T09:20:22.333 に答える