我认为这可能是不可能的,但我试图在我的超类“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]的结果是超类,但是我想初始化类本身(在这种情况下它将始终是子类)。也许这只是一个糟糕的编程想法。
答案 0 :(得分:0)
我必须输入[[[b alloc] init] release],这对我来说有点不雅观 它的作用并不那么明显。
我不同意。这段代码的作用非常明显。它正在分配B类(类应该按照大写的方式),初始化它,然后释放它。
[b load]
另一方面,这告诉我除了正在加载b这个事实。什么是装?它是alloc和init吗?
我想在a中定义加载,否则将加载复制并粘贴到b,c,d(继承自a)是浪费时间
这是不雅观的,做的不那么明显。此外,类实际上不应该知道它们的子类。
恕我直言,你的解决方案不是很好。这样做的方法是让超类有一个加载方法(我更喜欢一个具有更具描述性名称的指定初始化程序),它具有所有常用功能。然后,在您的子类中,覆盖您的load mthod以调用超级实现,然后为该特定子类添加您需要的任何代码。