0

除非我误解了,否则 Apple 文档中的这个LINK明确指出类初始化程序“+ (void)initialize)”每个类只执行一次。

这是摘录:

特别注意事项

initialize 每个类只调用一次。如果要对类和类的类别执行独立的初始化,则应实现加载方法。

但是,我的项目出现了一个奇怪的行为,并且初始化程序被执行了两次。所以我必须检查 _classContext 是否为空。我只有一个有这种方法的类。发生这种情况的可能原因是什么?

我正在使用 XCode 4.5.2 和 OS X 10.8.2。我有多个 iOS 模拟器,iPhone 5.1 和 6.0。

+ (void) initialize
{
    num++;
    NSLog([NSString stringWithFormat:@"Times: %i", num]);
    if(_classContext == nil)
        _classContext = [[myClass alloc] init];
} 
4

2 回答 2

2

如果您有此类的子类,则会发生这种情况。initialize将为类和每个子类调用该方法。

编码该方法的正确initialize方法是:

+ (void)initialize {
    // Replace ThisClass with the actual class name
    if (self == [ThisClass class]) {
        // do initialization here
    }
}
于 2012-11-22T23:03:24.333 回答
0

+initialize 可以多次调用,并且在覆盖 +initialize 时应谨慎。

请阅读 bbum 的 weblog-o-mat 上的博文+initialize Can Be Executed Multiple Times (+load not so much)

于 2012-12-06T05:32:04.083 回答