是否有一个与Swift的fatalError等效的Objective-C?

wj2*_*061 18 overriding subclass objective-c ios swift

我想丢弃超类的默认init方法.我可以fatalError在Swift中轻松实现这一点:

class subClass:NSObject{
  private var k:String!

  override init(){
    fatalError("init() has not been implemented")
  }

  init(kk:String){
    k = kk
  }
}    
Run Code Online (Sandbox Code Playgroud)

我怎么能在Objective-C中做到这一点?

Shr*_*ada 35

在这种情况下,您可以引发异常:

像这样的东西.请参阅此

  [NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Run Code Online (Sandbox Code Playgroud)

或者你甚至可以使用assert语句.

  [NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Run Code Online (Sandbox Code Playgroud)


hst*_*tdt 6

NSAssert(NO, @"balabala");
Run Code Online (Sandbox Code Playgroud)

或者

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

========== 更新 ==========

感谢@Cœur

NSAssert在生产中默认禁用,这与FatalError. NSException更好。

在此处输入图片说明


sca*_*aly 6

最佳实践是在 .h 中声明:

(instancetype)init __attribute__((unavailable("init() is unavailable")));
Run Code Online (Sandbox Code Playgroud)

那么如果有人调用它,编译器将不会编译。