Есть ли Objective-C эквивалент Swift fatalError?

Я хочу отказаться от метода init по умолчанию для суперкласса. Я могу легко достичь этого с помощью fatalError в Swift:

class subClass:NSObject{
  private var k:String!

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

  init(kk:String){
    k = kk
  }
}    

Как я могу сделать это в Objective-C?

Ответ 1

Вы можете вызвать исключение в этом случае:

Что-то вроде этого. Отослать это

  [NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];

Ответ 2

Просто вызовите метод NSObject doesNotRecognizeSelector:. Вы должны написать:

- (instancetype) init
{
    [self doesNotRecognizeSelector:_cmd];
}

где _cmd - скрытый параметр для каждого метода, значение которого является селектором метода.

Ответ 3

NSAssert(NO, @"balabala");

или

- (instancetype)init NS_UNAVAILABLE;

Ответ 4

Лучший ответ мой ;-)

Когда выполнение встречает FatalError, вы получаете Xcode, чтобы отобразить строку, в которой встретился FatalError, и отобразить информацию о файле, номере строки и т.д. В окне журнала.

Если вы хотите того же поведения, вы должны использовать "assert", доступный в стандартных ОС Lib, включая "assert.h"

#include "assert.h"

printf("Assertion false: blah, blah\n");
assert(false);

>>Assertion false: blah, blah
>>Assertion failed: (false), function +[X Y], file /Development/Tests/TestAssert.m, line 32.