清除方法中的静态变量

tec*_*man 1 static objective-c dispatch ios ios7

在我的一个方法中,我使用的是dispatch_once,我为其创建了一个静态变量.该方法按预期工作,单独运行时单元测试成功通过.但是当我同时运行测试时,其中一个测试失败,因为方法中的静态变量保持了值.

我的方法:

+ (NSString *)myMethod
{
    static NSString *dayOfTheWeek;

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
       // Do something.

        dayOfTheWeek = @"Monday";

        if (!dayOfTheWeek)
        {
            dayOfTheWeek = @"Sunday";
        }
    });

    return dayOfTheWeek;
}
Run Code Online (Sandbox Code Playgroud)

题:

所以我有单元测试来测试"星期一"和另一个单元测试来测试"星期天".如果我在XCODE上单独执行这两个测试,它们会通过,但是当我一起执行它们时,"Sunday"的测试失败,因为我的静态变量仍然保持值"Monday".

有没有办法可以清除方法级静态变量只是为了测试目的?或者还有其他方法可以成功执行这两项测试吗?

Rob*_*ier 5

条件逻辑几乎从不属于dispatch_once()块.如果某种逻辑在不同的执行中可能有所不同,那么每次执行程序时可能需要更频繁地重新评估一次.目前尚不清楚逻辑是什么,但是它是否像"今天是什么?" 那么,如果您的程序运行多天会发生什么?