0

我认为这可能是不可能的,但是我试图在我的超类“加载”中编写一个静态初始化程序,它甚至可以初始化我的子类。

+ (id) load
{
    Class c = [self class];
    NSString *cString = NSStringFromClass([self class]);
    NSLog(@"%@",cString);

    id a = [[c alloc] init];
    [a autorelease];
    return a;
}

这里 [self class] 的结果是超类,但我想初始化类本身(在这种情况下,它将始终是子类)。也许这只是一个糟糕的编程想法。

4

1 回答 1

0

我必须输入 [[[b alloc] init] release],这对我来说有点难看,而且它的作用不是那么明显。

我不同意。这段代码在做什么是非常明显的。它正在分配B类(顺便说一下,类应该大写),初始化它,然后释放它。

[b 加载]

另一方面,这只是告诉我 b 正在加载的事实。什么是加载?它分配和初始化吗?

我想在a中定义负载,否则将负载复制并粘贴到b,c,d(从a继承)是浪费时间

这是难看的,而且它的作用并不那么明显。此外,类真的不应该知道它们的子类。

恕我直言,您的解决方案不是一个很好的解决方案。这样做的方法是让超类有一个加载方法(我更喜欢一个具有更具描述性的名称的指定初始化程序),其中包含所有常见功能。然后,在您的子类中,覆盖您的加载方法以调用超级实现,然后为该特定子类添加您需要的任何代码。

于 2012-07-31T08:33:14.080 回答