(iphone)UIImageView setImage:泄漏?

eug*_*ene 7 iphone image objective-c uiimageview ios

我正在通过[self setImage:newImage]改变UIImageview的图像;

看起来每次我使用newImage,之前的图像似乎没有被释放.
替换UIImageView图像的正确方法是什么?

谢谢

小智 9

是的,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
Run Code Online (Sandbox Code Playgroud)


Emp*_*ack 6

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

如果您要将自动释放的图像分配给图像视图,则代码不会泄漏,如下所示.

UIImage *newImage = [UIImage imageNamed:@"sampleImage"];
[yourImageView setImage:newImage];
Run Code Online (Sandbox Code Playgroud)

但是,如果要在某处分配图像,则必须手动释放它.

  • 我基本上和你的代码做的一样.但是"仪器"显示每次我这样做时内存增加.在"仪器分配"中将"调用树"标记为"统计"并返回"调用树",显示内存返回到应该存在的位置.也许自动释放的对象在仪器中没有及时正确显示? (3认同)