Ответ 1
Вы можете вызвать исключение в этом случае:
Что-то вроде этого. Отослать это
[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Я хочу отказаться от метода 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?
Вы можете вызвать исключение в этом случае:
Что-то вроде этого. Отослать это
[NSException raise:@"InitNotImplemented" format:@"Subclasses must implement a valid init method"];
Просто вызовите метод NSObject
doesNotRecognizeSelector:
. Вы должны написать:
- (instancetype) init
{
[self doesNotRecognizeSelector:_cmd];
}
где _cmd
- скрытый параметр для каждого метода, значение которого является селектором метода.
NSAssert(NO, @"balabala");
или
- (instancetype)init NS_UNAVAILABLE;
Лучший ответ мой ;-)
Когда выполнение встречает 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.