Скажем, у меня есть псевдо-абстрактный базовый класс, который пользователи не должны создавать. В основном я хочу бросить предупреждение, когда они пытаются вызвать init в классе, или вернуть один из конкретных экземпляров со значениями по умолчанию.Запретить вызов метода «абстрактного» класса ObjC из класса при разрешении [super init]?
Однако конкретные реализации этого базового класса должны вызвать [super init]
в их инициализаторах. Конечно, это должно быть разрешено.
Как бы я лучше всего это сделал?
Я думал, что это должно быть прекрасно:
@implementation KTPhysicsShape
-(id) init
{
// throw exception here or return concrete instance with default values
}
// this is what subclasses would call in place of [super init]:
-(id) internal_initFromSubclass
{
return [super init];
}
@end
Любые опасения по поводу такого подхода? Я знаю, что другие могут по-прежнему вызывать внутренний метод, но меня больше всего беспокоит отказ от init
, так как это то, что пользователи будут пытаться вызвать прежде всего.
выглядит довольно нормально. но что делать, если вы вызываете вызов 'internal_initFromSubclass' в' init' вместо исключения исключения. Таким образом, в классе будет только ваш метод, который мог бы инициализировать объект. – samfisher