(iphone)UIImageView setImage:泄漏?

我正在改变UIImageView的图像[self setImage:newImage];

看起来每次我用newImage去做,以前的图像似乎都没有被释放。
什么是replaceUIImageView图像的正确方法?

谢谢

UIImageView setImage:永远不会泄漏,除非你传递的图像没有被释放。

你的代码不会泄漏,如果你正在分配一个自动发布的图像到图像视图,如下所示。

 UIImage *newImage = [UIImage imageNamed:@"sampleImage"]; [yourImageView setImage:newImage]; 

但是,如果您在某处分配图像,则必须手动将其释放。

是的,UIImageView setImage确实泄漏! 其实,泄漏CGImage,而不是UIImage(如仪器“分配”显示)

我使用BrutalUIImage而不是UIImage

 @interface BrutalUIImageView : UIView { UIImage *image; } @property(nonatomic, retain) UIImage *image; @end @implementation BrutalUIImageView @synthesize image; - (void)setImage:(UIImage *)anImage { [image autorelease]; image = [anImage retain]; [self setNeedsDisplay]; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; [image drawInRect:rect]; } - (void)dealloc { [image release]; [super dealloc]; } @end 

你的BrutalUIImageVIew类非常有趣,但是通过使用UIImage“drawInRect:”方法绘制图像,我丢失了我的PNG文件的透明区域。

你知道如何绘制图像,保持PNG透明吗? (当然,在调用“setImage:”的时候不会使用UIImageVIew来泄漏CGImage)

是的UIImageView setImage确实泄漏!

如果你通过一堆图像循环

  [yourImageView setImage:[UIImage imageNamed:@"sampleImage.png"]]; 

你可以在仪器上看到内存使用量的增加。 这似乎是某种caching四处走动后,通过所有的图像循环内存使用将会持平。

正确的或者至less是不漏的方式是:

  NSString *thePath = [[NSBundle mainBundle] pathForResource:@"sampleImage" ofType:@"png"]; UIImage *newImage = [[UIImage alloc] initWithContentsOfFile:thePath]; [yourImageView setImage:newImage]; 

我在我的代码上validation了这一点,因为我的应用程序正在循环大量的大图像文件。