【发布时间】:2023-04-06 10:09:01
【问题描述】:
假设我有一个用户不应该实例化的伪抽象基类。基本上,当他们尝试在类上调用 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
对这种方法有任何顾虑吗?我知道其他人仍然可以调用 internal 方法,但我最关心的是禁止init,因为这是用户最想调用的方法。
【问题讨论】:
-
看起来还不错。但是如果你在
init中调用internal_initFromSubclass而不是抛出异常怎么办。这样,类中只有你的方法可以初始化对象..
标签: objective-c properties protected ivar