我正在清理应用程序中的警告,我收到了两次警告
Method override for the designated initializer of the superclass '-init' not found
这段代码
@implementation AFNetworkReachabilityManager
和这一行
@implementation AFURLConnectionOperation
我对objective-c相当新,并且用Google搜索了这个警告,只是不明白解决方案
我的问题是如何摆脱这些警告?
答案 0 :(得分:23)
指定初始化程序的规则很复杂,我会将您反馈给一般案例的文档。奇怪的是,我发现最好的解释是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