ios Objective-c类初始化器执行多次

ax6ht2ek  于 2022-11-19  发布在  iOS
关注(0)|答案(2)|浏览(195)

除非我误解了,否则Apple文档中的这个LINK清楚地说明了类初始化器“+(void)initialize)"对每个类只执行一次。
以下是摘录:

特殊注意事项

initialize每个类只调用一次。如果要为类和类的类别执行独立的初始化,则应实现load方法。
然而,我的项目出现了一个奇怪的行为,初始化器被执行了两次。所以我必须检查_classContext是否为null。我只有一个类有这个方法。发生这种情况的可能原因是什么?
我使用的是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];
}
vdgimpew

vdgimpew1#

如果您有这个类别的子类别,就会发生这种情况。initialize方法会针对类别和每个子类别呼叫。
编写initialize方法的正确方法是:

+ (void)initialize {
    // Replace ThisClass with the actual class name
    if (self == [ThisClass class]) {
        // do initialization here
    }
}
5ssjco0h

5ssjco0h2#

可以多次调用+initialize,重写+initialize时应谨慎。
请阅读bbum的weblog-o-mat上的博客文章+initialize Can Be Executed Multiple Times (+load not so much)

相关问题