1年枕、Value stored to 'xxx' during its initialization is never read
容易出現(xiàn)這個問題的情況:一個數據源卻申請了兩塊內存。導致另外一個內存沒用了漠趁。如:
例子1:想把兩個可變數組分情況賦值
//NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:0]; //錯誤
NSMutableArray *tempArray; //正確:只需做一個可變數組tempMutArr的聲明佑菩,不需要給它分配實際內存
if (self.mSwitch.isOn) {
tempArray = self.array1;
}else{
tempArray = self.array2;
}
例子2:取值
//NSMutableArray *datesArray = [[NSMutableArray alloc]init];//錯誤
NSMutableArray *datesArray = nil; //正確
datesArray = [_onDemandDictionary objectForKey:key];
上述標明錯誤的語句的的錯誤原因是:那樣做會導致整段代碼下來出現(xiàn)了一個數據源卻申請了兩塊內存的情況盾沫。從而導致靜態(tài)檢測內存泄露的時候,有有內存泄漏的提示 Value stored to 'tempMutArr' during its initialization is never read殿漠。
2赴精、Value stored to "xxx"is never read
Value stored to "xxx"is never read 即表示該變量只是被賦值卻并沒有被使用。解除這個:刪除(或者注視)這行代碼OK;
3凸舵、potential leak of an object stored into
情況1:CFURLCreateStringByAddingPercentEscapes得到的值是CFStringRef祖娘,需要使用(__bridge_transfer NSString *)
來轉成NSString。常發(fā)生在對 URL 進行 Encode
CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(...);
NSString *string = (__bridge_transfer NSString *)cfString; //注意是` (__bridge_transfer NSString *)`而不是` (__bridge NSString *)`
情況2:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, locations);
......
CGColorSpaceRelease(colorSpace); //最后需要釋放資源
CGGradientRelease(gradient); //最后需要釋放資源
4啊奄、Property of mutable type ’NSMutableArray/NSMutableAttributedString’ has ‘copy’ attribute,an immutable object will be stored instead
//錯誤做法
@property (nonatomic, copy) NSMutableArray *array;
@property (nonatomic, copy) NSMutableAttributedString *attributedString;
//正確做法
@property (nonatomic, strong) NSMutableArray * array;
@property (nonatomic, strong) NSMutableAttributedString *attributedString;
分析: NSMutableArray是可變數據類型,應該用strong來修飾其對象掀潮。
說明: Analyzer由于是編譯器根據代碼進行的判斷, 做出的判斷不一定會準確, 因此如果遇到提示, 應該去結合代碼上文檢查一下菇夸;還有某些造成內存泄漏的循環(huán)引用通過Analyzer分析不出來。
5仪吧、the left operand of '!=' is a garbage value
當出現(xiàn)這個警告(內存泄露)的時候庄新,是由于你左邊的變量在不滿足上面if的條件的時候,沒有給所提示的'!='符號的左邊變量賦值,會造成這樣的警告择诈。解決辦法是:可以將該左邊變量初始化一個值械蹋,或者保證在進行if判斷的時候一定有值。
CLLocationCoordinate2D locationCoordinate;
if(locationCoordinate.latitude != 0 && locationCoordinate.longitude != 0)
{
}
//正確
CLLocationCoordinate2D locationCoordinate;
passCoordinate = CLLocationCoordinate2DMake(0, 0); //補充初始化
if(locationCoordinate.latitude != 0 && locationCoordinate.longitude != 0)
{
}
結束羞芍!