Analyze是静态检测内存泄漏工具,他只是发现可疑漏点。可以通过Product->Analyze菜单启动
检测出的常见的三种泄漏的情况:
1->创建了对象没有使用;如NSString *str = [NSString string];但是str这之后就没被使用过
2->创建了对象,而且也初始化了,但初始化的值一直没有读取过:Value store to ‘X’during its initialization is never.如NSNumber *number;number = @(str.length);在这之后没被使用。
3->Potential leak of an object stored into 'XX'* 。 翻译一下:XX对象的内存单元有潜在的泄露风险。如NSString *str = [NSString string];// 创建并初始化str,此时已经有一个内存单元保存str初始化的值str = @"ceshi";str被改变了,指向了"ceshi"所在的地址,指针改变了,但之前保存初始化值的内存空间还未释放,保存str初始化值的内存单元泄露了。但是// NSString *str; // 这样就内存不泄露,因为str是可变的,只需要先声明就行。
4.Potential leak of an object stored into 'cs'表示-----调用了让某个对象引用计数加1的函数,但没有调用相应让其引用计数减1的函数-----原因:Core Foundation是一组C语言框架,不是ARC的,需要手动释放内存,这个比较坑-----修改:CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
CGColorSpaceRelease(cs);