Objective-C初始化(静态方法)被称为更多一次?

Ric*_*III 7 unit-testing initialization global-variables objective-c autorelease

我在Objective-C中有类似的代码:

SubclassOfNSObject *GlobalVariableThatShouldNeverChange;

@implementation MyClass

+(void) initialize
{
    [super initialize];
    GlobalVariableThatShouldNeverChange = [[SubclassOfNSObject alloc] init];
    // Change more stuff with GlobalVariableThatShouldNeverChange
}

@end
Run Code Online (Sandbox Code Playgroud)

我在整个代码中引用了这个,并且指向它的指针永远不会改变,因为我通过我的代码在任何地方使用它.问题是,当我运行我的测试时GHUnit,我GlobalVariableThatShouldNeverChange的指针被更改的奇怪问题(即它正在重新初始化.我有一个问题,通过自动释放池释放变量,这是固定的,我有一个解决这个问题的方法,但我想知道为什么

谢谢!

dre*_*lax 16

文件说:

运行时只是在类之前将一个初始化发送到程序中的每个类,或者从它继承的任何类.

建议的方法是:

+ (void)initialize
{
    if (self == [GHUnit class]) {

        /* put initialization code here */

    }
}
Run Code Online (Sandbox Code Playgroud)

另请注意文档中的以下建议:

...你通常不应发送initializesuper您的实现.


Jay*_*nor 6

简短的回答是肯定的,+initialize可以不止一次被召唤.

Bill Bumgarner在他的博客上写了一篇关于此事的好文章.请参阅+ initialize可以执行多次(+加载不是那么多)