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)
有任何想法吗?就像我说的,当我注释掉最后两行(释放按钮和图像)时,它可以正常工作.这是正常的还是我应该能够释放它们?
注意:我已经删除了一些其他代码以在较小的块中显示此示例!
该实例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的内存管理指南.