【发布时间】:2012-07-29 21:12:22
【问题描述】:
我认为这可能是不可能的,但我试图在我的超类“加载”中编写一个静态初始化程序,它甚至可以初始化我的子类。
+ (id) load
{
Class c = [self class];
NSString *cString = NSStringFromClass([self class]);
NSLog(@"%@",cString);
id a = [[c alloc] init];
[a autorelease];
return a;
}
这里 [self class] 的结果是超类,但我想初始化类本身(在这种情况下,它将始终是子类)。也许这只是一个糟糕的编程想法。
【问题讨论】:
-
有什么特殊原因需要从超类初始化子类吗?在创建任何一个类的任何实例或调用任何静态方法之前,这两个类都被初始化。
-
你是在说创建一个单例类吗?
-
告诉我们您想要达到的目标,我们或许可以提出更好的解决方法。就目前而言,我不知道您要完成什么,因此无能为力!
-
我和@FranciscoSilva 一起讨论这个问题,这没有任何意义。如果您需要子类的实例,请使用您的子类进行初始化。 super 不应该知道它的子类。
-
可以说我有一个类 a 具有某些要在初始化时运行的操作,它会保留自己并在完成后释放自己。所以类b继承自类a,所以每次我想使用类b或c或d等时我必须输入[[[b alloc] init] release],这对我来说有点难看,它的作用不是如此明显。我想用[b load]替换[[[b alloc] init] release],但是我想在a中定义load,否则将load复制粘贴到b,c,d中是浪费时间(继承自 a)。
标签: objective-c alloc