用于分析阵列枚举的死存储消息

时间:2014-04-11 18:29:10

标签: ios xcode nsarray

我正在使用Xcode 5.0.2。当我在我的项目上运行analyze时,它为NSArray中的stop参数提供了死存储消息indexOfObjectWithOptions:passingTest :.消息是 - 永远不会读取存储到'stop'的值。示例代码是

 NSUInteger index = [self.array indexOfObjectWithOptions:NSEnumerationConcurrent passingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
            // Do some check. If it passes
            stop = YES; // Reports dead store here
            return isFound;
        }];

我相信我正确地停止了枚举。是否有另一种设置停止值的方法,以便我可以避免此消息。

2 个答案:

答案 0 :(得分:2)

改变这个:

stop = YES;

为:

*stop = YES;

您需要取消引用指针以设置其值。

尽管你应该这样做是非常安全的(如果指针是nil,它可以避免崩溃):

if (stop) {
    *stop = YES;
}

答案 1 :(得分:0)

您没有在代码中的任何其他位置使用该变量stop,您只需为其分配值,但不使用该值。

情况1

如果您编写如下代码:

- (BOOL)deadStore
{
   BOOL dead = YES;     // dead store warning
   dead = NO;
   return dead;
}

情况2

如果您编写如下代码:

- (int)deadStore
{
   BOOL dead   = YES;     // dead store warning
   int notDead = 7
   return notDead;
}