除非我误解了,否则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];
}
2条答案
按热度按时间vdgimpew1#
如果您有这个类别的子类别,就会发生这种情况。
initialize
方法会针对类别和每个子类别呼叫。编写
initialize
方法的正确方法是:5ssjco0h2#
可以多次调用+initialize,重写+initialize时应谨慎。
请阅读bbum的weblog-o-mat上的博客文章+initialize Can Be Executed Multiple Times (+load not so much)。