谁能告诉我如何释放图片,这是作为背景图片在UIButton中使用。我创建自定义按钮使用以下代码,但我不能释放内存的UIImage,这是设置在UIButton的背景图像。下面是我用来创建UIButton的代码
`
for (int index=0;index<10; index++)
{
UIImage *image=[[UIImage alloc] initWithData:imageData];
CGRect frame = CGRectMake(xValue, 10, 50, 50);
UIButton *button = [[UIButton alloc] initWithFrame:frame];
[button addTarget:self action:@selector(onClickImgButton:)forControlEvents:UIControlEventTouchUpInside];
[button setTag:index];
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setImage:image forState:UIControlStateNormal];
[button.layer setCornerRadius:10.0f];
[button.layer setMasksToBounds:YES];
[button.layer setBorderWidth:3.0f];
[button.layer setBorderColor:[[UIColor lightGrayColor] CGColor]];
image=nil;
[image release];
[horizontalScrollView addSubview:button];
button=nil;
[button release];
xValue=xValue+60;
cx +=60;
}`
发布于 2011-05-02 18:41:16
首先,你混合了你的image=nil;镜像发布;
命令,则应首先释放,然后将指针设置为nil。现在,您正在向nil发送"release“,但什么也没有发生。您可以对按钮btw执行相同的操作。
现在,如果你想让图片从内存中释放出来,只要它正在被按钮使用,你就不能这么做。因此,您必须从内存中释放按钮(在本例中,通过修复释放并将指针设置为nil,并从其superview中删除按钮)或执行
[button setImage:nil forState:UIControlStateNormal];应将保留计数设置为0,并最终取消分配映像
发布于 2011-05-02 18:40:32
在上面的代码中,您向nil发送了release消息。通常情况下,颠倒这一点,即
[image release];
image = nil;here也犯了类似的错误。
然而,由于UIButton实例(根据UIButton.h的快速浏览)保留了图像,因此执行image = nil是错误的,即
[image release];是正确的。您目前对给定对象如何设置其属性做了一个很大的假设。
例如,想象一下当释放UIButton实例的时候会发生什么。当你很久以前就将你的图像设置为nil时,它将如何将release发送到它保留的图像中呢?该按钮发现自己保留了一个空图像。它将面临您自己遇到的相同问题--将release发送到零!
https://stackoverflow.com/questions/5856119
复制相似问题