什么是将UIImage分配给内存并将其释放到iphone的正确方法

dub*_*eat 2 iphone memory-leaks uiimageview

使用Instruments,我继续使用UIImage指向内存泄漏.
我想我正在分配和释放内存.仪器中泄漏的物体被描述为NSConcreteData

以下是分配和释放UIImage的正确方法吗?

UIImage* flagimg = [UIImage imageWithData: [NSData dataWithContentsOfURL:url2]];    
[flagimg release];
flagimg =nil;
Run Code Online (Sandbox Code Playgroud)

Alf*_*nso 8

[UIImage imageWithData:]返回一个自动释放的对象,不应该再次释放.因此,这段代码剪切不包含内存泄漏,但相反,双重免费(在最坏的情况下).

请注意,仪器有时会在基金会本身产生误报和/或报告内存泄漏(是的,它们也会犯错误:-).

分配/释放对象的最快方法是避免使用便利初始化器(如imageWithData :),而不是像

NSData* data = [[NSData alloc] initWithContentsOfURL:url]];
UIImage* img = [[UIImage alloc] initWithData:data];
[data release];
// use your image
[img release];

这将立即分配和释放您的对象,而不是等到清理自动释放池.

但是请注意,内存泄漏通常不是尚未释放的内存,但是丢失并且不能再释放,因此将被自动释放池释放的对象不被视为内存泄漏.