在目标c中初始化子类

时间:2012-07-29 21:12:23

标签: objective-c alloc

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

我必须输入[[[b alloc] init] release],这对我来说有点不雅观   它的作用并不那么明显。

我不同意。这段代码的作用非常明显。它正在分配B类(类应该按照大写的方式),初始化它,然后释放它。

  

[b load]

另一方面,这告诉我除了正在加载b这个事实。什么是装?它是alloc和init吗?

  

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

这是不雅观的,做的不那么明显。此外,类实际上不应该知道它们的子类。

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