NS_DESIGNATED_INITIALIZER预期:(冒号)

Dev*_*shi 24 cocoa objective-c ios7

我试图声明一个像这样的指定初始化器:

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate NS_DESIGNATED_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

但是它向我显示了这个编译错误:

Expected ':'
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我尝试这样写时(参考链接:采用现代Objective-C) -

- (instancetype)init NS_DESIGNATED_INITIALIZER;
Run Code Online (Sandbox Code Playgroud)

它显示了这个错误:

Expected ';' after method prototype.
Run Code Online (Sandbox Code Playgroud)

有关如何正确使用NS_DESIGNATED_INITIALIZER的任何想法?

Sul*_*han 34

NS_DESIGNATED_INITIALIZER在Xcode 5的库头文件中没有定义宏 - 您需要Xcode 6才能使用它.请注意您的链接显示"预发布".

宏以下列方式定义(引用NSObjCRuntime.h)

#ifndef NS_DESIGNATED_INITIALIZER
#if __has_attribute(objc_designated_initializer)
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
#else
#define NS_DESIGNATED_INITIALIZER
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然可以使用

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate __attribute__((objc_designated_initializer));
Run Code Online (Sandbox Code Playgroud)

在Xcode 5中,您可以将该宏明确添加到预编译的头文件中.