Objective-C警告方法覆盖未找到超类'-init'的指定初始值设定项

时间:2015-09-23 13:35:04

标签: ios objective-c

我正在清理应用程序中的警告,我收到了两次警告

Method override for the designated initializer of the superclass '-init' not found

这段代码

@implementation AFNetworkReachabilityManager

和这一行

@implementation AFURLConnectionOperation

我对objective-c相当新,并且用Google搜索了这个警告,只是不明白解决方案

我的问题是如何摆脱这些警告?

1 个答案:

答案 0 :(得分:23)

来自Apple forums

  

指定初始化程序的规则很复杂,我会将您反馈给一般案例的文档。奇怪的是,我发现最好的解释是Swift编程语言的“初始化”部分,因为相同的概念适用于Swift和Objective-C。   在您的特定情况下,您应该覆盖-init并使其在运行时失败。您还应该使用NS_UNAVAILABLE在标头中标记它,这将允许编译器在典型情况下捕获它。   以上情况适用,因为您的类不可能在没有模型的情况下运行,因此您无法以任何有用的方式合理地实现-init。如果可以,你应该。例如,如果你正在创建自己的字符串对象,那么通过调用super然后将字符串初始化为空字符串来实现-init是有意义的。

.h个文件中:

@interface MyClass : NSObject  
- (instancetype)init NS_UNAVAILABLE;  

@end  

.m个文件中:

@interface MyClass ()  
- (instancetype)init NS_DESIGNATED_INITIALIZER;  
@end  

@implementation MyClass  
 - (instancetype)init { @throw nil; }  

@end