我有一个类Foo
,它实现了一个+(void)initialize
方法。我也有一个类是Foo
的子类。当我实例化子类时,initialize
方法也会在我不想要的Foo
上调用。我如何防止这种情况?subclassing objective-c中的初始化方法
谢谢。
我有一个类Foo
,它实现了一个+(void)initialize
方法。我也有一个类是Foo
的子类。当我实例化子类时,initialize
方法也会在我不想要的Foo
上调用。我如何防止这种情况?subclassing objective-c中的初始化方法
谢谢。
我已经解决了它的不执行初始化,只是调用设置方法,而不是
Costique的答案更好,也是Apple推荐的方式。在多线程的情况下调用一次setup方法可能会非常困难,并且为此目的进行初始化。 – fishinear 2013-03-20 19:21:20
Fishinear,bbum另有说明,通常是正确的(http://www.friday.com/bbum/2009/09/06/iniailize-can-be-executed-multiple-times-load-not-so-much/) – 2014-04-08 19:17:07
您还需要在子类中实现+ (void)initialize
。通常人们会拨打[super initialize]
,但您会想跳过这一步。一个空的方法将阻止Foo
的被调用。
编辑总是调用超类initialize
方法。它不能也不应该通过子类来阻止,因为技术上超类也被初始化并可以独立使用。
在您的方案(如果有涉及到子类),你应该检查类,以该initialize
方法发送:
+ (void) initialize
{
if (self == [MyClass class])
{
// Do something here only once
}
}
我是否正确地认为你只是不在'init'子类中做'self = [super init]'? – petert 2012-01-18 16:48:36
我想他是在谈论类'initialize'方法,但是如果他真的指的是'init',那么这是正确的。 – 2012-01-18 16:51:06
+(void)初始化 – JPC 2012-01-18 16:51:35