如何释放UIButton的背景图片?
问题描述:
谁能告诉我如何释放在UIButton中用作背景图片的图片。我使用下面的代码创建了自定义按钮,但是我无法释放在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;
}
`
答
首先,你混了你的 image = nil; [image release];
命令,你应该先释放,比将指针设置为nil。现在你发送“释放”到零,没有任何反应。你对按钮顺便做同样的事。
现在,如果您希望将图像从内存中释放,只要该按钮正在使用该图像,就无法进行此操作。所以,你会(通过固定的释放和指针设置为nil,并除去按钮从它的上海华在这种情况下)必须要么无记忆按钮或做
[button setImage:nil forState:UIControlStateNormal];
应该设置保留计数0并最终释放图像
答
在上面,你要发送的release
消息nil
。一般来说,这是相反的,即
[image release];
image = nil;
类似的错误发生在here。
然而,由于UIButton
实例(根据快速看一下UIButton.h
)保持图像这是一个错误的做image = nil
即只是
[image release];
是正确的。您目前正在对某个给定对象如何设置其某个属性做出重大假设。
例如,想象当释放您的UIButton实例时会发生什么。如果您早已将图像设置为nil
,那么它会如何将release
发送到您保留的图像?该按钮发现自己保留了一个零图像。它会面临你给自己的同样的问题 - 发送release
到零!
@All:换句话说,UIButton实例会在图像上放置一个保留。当按钮被释放时,图像将自动从按钮中获取释放消息。如果没有其他东西保留图像(所以保留计数为零),图像将被释放。我不会尝试再次猜测保留图像的内容。在这里设置'image = nil'肯定是一个错误,请参阅我的答案了解更多细节。 – SK9 2011-05-02 12:40:38