使用 Instruments,我不断发现 UIImage 内存泄漏。
我认为我正在正确分配和释放内存。 Instruments 中泄漏的对象被描述为 NSConcreteData
以下是分配和释放 UIImage 的正确方法吗?
UIImage* flagimg = [UIImage imageWithData: [NSData dataWithContentsOfURL:url2]];
[flagimg release];
flagimg =nil;
[UIImage imageWithData:]
返回一个自动释放的对象,您不应再次释放该对象。因此,这段被剪断的代码不包含内存泄漏,而是相反,双重释放(在最坏的情况下)。
请注意,Instruments 有时会产生误报和/或报告 Foundation 本身的内存泄漏(是的,它们也会犯错误:-)。
分配/释放对象的最快方法是避免方便的初始值设定项(如 imageWithData:),而是使用类似的方法
NSData* data = [[NSData alloc] initWithContentsOfURL:url]];
UIImage* img = [[UIImage alloc] initWithData:data];
[data release];
// use your image
[img release];
这将立即分配和释放您的对象,而不是等到自动释放池被清理。
但也请注意,内存泄漏通常不是内存不存在yet被释放了,但是已经丢失了无法再被释放,因此将由自动释放池释放的对象不被视为内存泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)