首先,让我们大呼三声:
NO WARNING ! NO ANALYZE!
NO WARNING ! NO ANALYZE!
NO WARNING ! NO ANALYZE!
1. Value stored to 'XXX' during its initialization is never read
这种情况通常是定义了一个对象或者变量而在后续没有使用,多占用了内存,并不是发生了内存泄露,这里说两个我遇到的问题。
CGFloat height = WIDTH * 0.2f;
if (indexPath.row == 0) {
height = 100;
} else if (indexPath.row > 4) {
height = 200;
}else {
height =50;
}
return height;
在这里height变量就会报该问题,因为我们初始化的值并没有在后续代码中使用,此时我们只需要将第一行修改为
<span style="white-space:pre"> </span>CGFloat height;
即可。
AnswerSheetCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"AnswerSheetCell" owner:self options:nil] lastObject];
cell = [cv dequeueReusableCellWithReuseIdentifier:cell_Identifier forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
此时同样会报该问题,因为cell的初始化和复用同时执行,会造成每次使用cell的时候都被初始化,并且在随后再次复用。
<pre name="code" class="objc"> AnswerSheetCell *cell = [cv dequeueReusableCellWithReuseIdentifier:cell_Identifier forIndexPath:indexPath];
if(cell == nil){
<span> </span> cell = [[[NSBundle mainBundle] loadNibNamed:@"AnswerSheetCell" owner:self options:nil] lastObject];
<span> </span> cell.backgroundColor = [UIColor clearColor];
按照cell的标准写法就没问题啦!
2. Potential leak of an object stored into 'XXX'
例如此时的cfuuid:
NSString *udidString;
udidString = [[self class] objectForKey:@"deviceID"];
if(!udidString)
{
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
[[self class] setObject:udidString forKey:@"deviceID"];
}
For every object that you create with a CF*Create function, you should release it with CFRelease. This is part of the Core Foundation ownership policy.
3.Value stored to 'XXX' is never read
一般来说,这个是定义的变量或者对象在赋值或者初始化之后,在后续的代码中每次使用均重新赋值或者重新初始化的情况下,会出现这样的分析问题。
4.The left operand of '&' is a garbage value
这里说明是在数据赋值的时候