ios - 清除方法中的静态变量

标签 ios objective-c ios7 static dispatch

在我的一种方法中,我正在使用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;
}

问题:

所以我有单元测试来测试“星期一”,另一个单元测试来测试“星期日”。如果我在XCODE上分别执行这两个测试,则这些测试将通过,但是当我一起执行它们时,“Sunday”的测试将失败,因为我的静态变量仍保持值为“Monday”。

有没有一种方法可以仅出于测试目的而清除方法级别的静态变量?还是有其他方法可以成功执行两个测试?

最佳答案

条件逻辑几乎永远不属于dispatch_once()块。如果在不同的执行中存在某种逻辑可能不同的逻辑,则可能需要对每个程序执行一次以上的重新评估。目前尚不清楚逻辑是什么,但是否类似“今天是什么?”那么,如果您的程序运行多天会怎样?

关于ios - 清除方法中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788568/

相关文章:

iphone - 对从 pList 加载的 UITableView 部分进行排序

ios - 在靠近边框的文本框内设置颜色

Xcode 5 : "No such provisioning profile was found ..." error

ios7 - UISplitViewController iOS 7 向后兼容性

ios - 检查应用程序是否是在 iPad 上打开的 iPhone 应用程序

ios - 在当前位置蓝点之上覆盖透明 PNG

ios - 向下传递数据

ios - Crashlytics 未收到来自 TestFlight 的崩溃

ios - shouldperformseguewithidentifier WatchKit 扩展

ios - iOS7 中的滑动手势控制问题