uiimage和uibutton发布问题?

Mat*_*cer 0 iphone release objective-c

我已经在objective-c中编写了一段时间并对它感到满意......但有一件事让我失望.内存管理.我正在发布,因为我认为是正确的,但这段代码抛出"EXC_BAD_ACCESS"并崩溃了应用程序.

当我注释掉并且不释放按钮和图像时,它工作正常.调用该函数以读取图像文件名数组.

for (x=items_start;x<items_stop;x++) {

    UIButton *button;
    UIImage *buttonImage;

    buttonImage = [UIImage imageNamed:[NSString stringWithFormat:@"%i.png", x]];
    button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.tag = x;
    [button setImage:buttonImage forState:UIControlStateNormal];
    [button addTarget:self action:@selector(duplicateImage:) forControlEvents:UIControlEventTouchUpInside];

    [viewBasicItems addSubview:button];     

    [buttonImage release];
    [button release];

}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?就像我说的,当我注释掉最后两行(释放按钮和图像)时,它可以正常工作.这是正常的还是我应该能够释放它们?

注意:我已经删除了一些其他代码以在较小的块中显示此示例!

Ale*_*lds 6

该实例button是自动释放的:

button = [UIButton buttonWithType:UIButtonTypeCustom];
Run Code Online (Sandbox Code Playgroud)

您正在使用便捷方法+buttonWithType:而不是一alloc/init对.所以你的应用程序也会在这里崩溃:

[button release];
Run Code Online (Sandbox Code Playgroud)

删除该-release语句或用于alloc/init实例化按钮视图.

我建议你使用,alloc/init因为你在for循环中做所有这些东西.您可能在该循环中构建了许多需要自动释放的对象.手动分配内存并释放它可能更好.

并阅读Apple的内存管理指南.