【问题标题】:UIImage deallocate problemUIImage 解除分配问题
【发布时间】:2010-09-15 05:33:47
【问题描述】:

我一直在努力解决这个问题,我已经阅读了所有关于释放问题的帖子,但不明白为什么,因为我对 Objective-c 和 iphone 还是很陌生,正如你所知道的 :)

但我不明白的是下面这段代码说我过度释放 UIImage,现在我已经尝试了所有方法但应用程序仍然崩溃

UIImage *imageSave      = [UIImage imageNamed:@"btn_save.png"];
UIButton *btnSave       = [UIButton buttonWithType:UIButtonTypeCustom];

[btnSave setBackgroundImage:imageSave forState:UIControlStateNormal];

btnSave.frame = CGRectMake(0, 0, imageSave.size.width, imageSave.size.height);

[btnSave addTarget:self action:@selector(save) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *barBtnSave = [[UIBarButtonItem alloc] initWithCustomView:btnSave];

self.navigationItem.rightBarButtonItem  = barBtnSave;

//[imageSave release];
//[btnSave release];
[barBtnSave release];


UIImage *imageCancel    = [UIImage imageNamed:@"btn_cancel.png"];
UIButton *btnCancel     = [UIButton buttonWithType:UIButtonTypeCustom];

[btnCancel setBackgroundImage:imageCancel forState:UIControlStateNormal];

btnCancel.frame = CGRectMake(0, 0, imageCancel.size.width, imageCancel.size.height);

[btnCancel addTarget:self action:@selector(cancel) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barBtnCancel = [[UIBarButtonItem alloc] initWithCustomView:btnCancel];

self.navigationItem.leftBarButtonItem   = barBtnCancel;

//[imageCancel release];
//[btnCancel release];
[barBtnCancel release];

【问题讨论】:

  • 即使注释掉了对“释放”的调用,您也有问题吗?或者您是否想了解为什么必须将它们注释掉?

标签: iphone xcode iphone-sdk-3.0


【解决方案1】:

好的,我们来看看这两行:

UIImage *imageCancel = [UIImage imageNamed:@"btn_cancel.png"];

[imageCancel release];

在 1 行中,你创建了一个 autorelease 图像,然后retainCount 为0。然后,你释放图像,这会使retainCount 为-1,导致崩溃

您需要记住的是增加retainCount 的列表:alloccopyretain ... 如果您将这些方法之一调用到对象,则必须执行以下任一操作:autoreleaserelease

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多