说我有一个用户不应该实例化的伪抽象基类。基本上我想在他们试图调用该类的init时发出警告,或者返回具有默认值的具体实例之一。在允许[super init]时阻止ObjC“抽象”类“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
,因为这是用户尝试称之为最重要的。
看起来很不错。但是如果你在init中调用'internal_initFromSubclass'而不是抛出异常。这样,只有你的方法可以初始化对象。 – samfisher 2013-04-05 15:22:09