【问题标题】:"Dead Store" Warning in XcodeXcode 中的“死店”警告
【发布时间】:2011-11-27 16:49:31
【问题描述】:

当我分析我的项目但项目没有崩溃时,我收到了死店警告。 这就是我正在做的事情

NSString *graphUrl = nil;

if ([graphArray count] == 1)
{
    objTrial = [graphArray objectAtIndex:0];

    graphUrl = @"http://chart.apis.google.com/chart?cht=s:nda&chf=bg,s,FFFFFF&chs=";

    graphUrl = [graphUrl stringByAppendingString:@"&chd=t:"];
    graphUrl = [graphUrl stringByAppendingString:objTrial.highValue];// get the dead store error here

}
else
{
    //someother operation is done and a value is loaded to aURL
}

我收到代码中提到的死店警告。如何防止这种情况发生?

如果有人能在这方面帮助我,那就太好了

【问题讨论】:

  • 大概你的意思是NSString *aUrl = @""; 在第一行?
  • 如果给一个局部变量赋值,但后面的任何指令都没有读取到这个值,则称为死存储。死存储会浪费处理器时间和内存。所以只需使用变量,警告就会消失。

标签: ios xcode memory-management nsstring


【解决方案1】:

Dead Store 是一个已分配但从未使用过的值。没有什么可担心的。但是,如果您无法控制自己的担忧;-) 您可以将代码更改为,

NSString aUrl = nil;

if ([anArray count] == 1) {

    // a value is store in aValue
    // then that value is appended to aURL
    aURL = [aURL stringByAppendingString:aValue];

} else {

    aUrl = @"";
    //someother operation is done and a value is loaded to aURL
}

【讨论】:

  • 谢谢.. 我做了同样的事情,但它仍然在同一行给我那个错误。当我添加 aURL = @"";它在该行也给了我“存储在 aURL 的值永远不会读取警告”。知道我做错了什么吗?
  • 我看到了你的代码。你的代码完全没问题。它显示了警告,因为正如我已经说过的,您在不使用以前的值的情况下重复地将值分配给graphUrl。无需担心警告。继续使用您的代码。
【解决方案2】:

警告告诉您,您在第一行中所做的存储被丢弃(即为变量分配一个空字符串,然后在不使用原始值的情况下重新分配它)。只需将第一行更改为以下内容,警告就会消失:

NSString *aUrl;

编辑:

您也应该更改使用它的行:

aURL = [aValue copy];

【讨论】:

  • 我尝试了你也建议的同样的事情,但它再次给了我同样的警告......
  • 我假设您在发布代码之后实际上是在使用 graphurl 变量做一些事情?如果不是,那就是问题
  • DOH!!!我是个傻瓜.. 没有正确看待它.. 我正在用 graphURL 做一些事情.. 我不得不将它分配给我忘记的东西.. 非常感谢!!!
【解决方案3】:

“dead store”是指未使用的东西,或者说是无用的东西。

当你定义了一个你从不做任何事情的变量时,你就会得到它。因此,分析器会告诉您您浪费了一些存储空间。

这里你没有使用aUrl对象赋值后。

除了浪费几个字节的内存之外,它不会引起任何问题。当然,如果它是一个大物体,可能会更多。

也许有人可以利用编译器的知识参与进来,因为编译器优化可能会在任何情况下处理死存储。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    相关资源
    最近更新 更多