Xcode中的“死店”警告

时间:2011-09-29 12:59:03

标签: ios xcode memory-management nsstring

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

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
}

我在代码中提到了一个死店警告。我该怎样阻止这个?

如果有人可以帮我解决这个问题,那会很棒。

3 个答案:

答案 0 :(得分:6)

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

NSString *aUrl;

编辑:

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

aURL = [aValue copy];

答案 1 :(得分:2)

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

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

这里你没有在分配之后使用aUrl对象。

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

也许有人可以熟悉编译器,因为在任何情况下编译器优化都可能会处理死存储。

答案 2 :(得分:2)

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
}