如何释放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并最终释放图像

+0

@All:换句话说,UIButton实例会在图像上放置一个保留。当按钮被释放时,图像将自动从按钮中获取释放消息。如果没有其他东西保留图像(所以保留计数为零),图像将被释放。我不会尝试再次猜测保留图像的内容。在这里设置'image = nil'肯定是一个错误,请参阅我的答案了解更多细节。 – SK9 2011-05-02 12:40:38

在上面,你要发送的release消息nil。一般来说,这是相反的,即

[image release]; 
image = nil; 

类似的错误发生在here

然而,由于UIButton实例(根据快速看一下UIButton.h)保持图像这是一个错误的做image = nil即只是

[image release]; 

是正确的。您目前正在对某个给定对象如何设置其某个属性做出重大假设。

例如,想象当释放您的UIButton实例时会发生什么。如果您早已将图像设置为nil,那么它会如何将release发送到您保留的图像?该按钮发现自己保留了一个零图像。它会面临你给自己的同样的问题 - 发送release到零!