当我分析我的项目但项目没有崩溃时,我收到一个死店警告。 这就是我正在做的事情
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
}
我在代码中提到了一个死店警告。我该怎样阻止这个?
如果有人可以帮我解决这个问题,那会很棒。
答案 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
}