【发布时间】:2013-02-03 17:09:49
【问题描述】:
我正在构建一个仅适用于 iPhone 的小型应用程序 (iOS SDK 6.0),我在 XCode 中遇到 EXC_BAD_ACCESS 异常。
应用程序有UITableView 和自定义UITableViewCell。我在一个子类中实现了UITableViewCell(这里我称之为MyCustomCell)并向构造函数添加了另一个参数:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier cellImage:(UIImage *)image;
将UIImage添加到方法中TableCell的contentView,代码如下:
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
imageView.image = image;
[self.contentView addSubview:imageView];
这个函数当然是在函数cellForRowAtIndexPath内部调用的:
static NSString *CellIdentifier = @"MyCustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier cellImage:self.cellImage] autorelease];
}
return cell;
ViewController(也是UITableViewDelegate)的cellImage 属性声明为(它也是合成的):
@property (nonatomic, retain) UIImage* cellImage;
图像在 ViewController 的viewWillAppear 方法中初始化,代码如下:
cellImage = [UIImage imageNamed:@"my_image_resource.png"];
此代码可以正常工作,但是当我使用 iOS 6.0 唯一功能自定义图像时出现 EXC_BAD_ACCESS :
cellImage = [[UIImage imageNamed:@"my_image_resource.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10) resizingMode:UIImageResizingModeStretch];
调试帮助我找到了触发错误的行 - 它位于 MyCustomCell 实现的 initWithStyle 方法中:
imageView.image = image;
我已经查看了许多EXC_BAD_ACCESS 错误,我还阅读了为什么会出现此错误的教程,但到目前为止,我并没有取消分配任何东西。此时可能会释放一些对象,但我无法准确找到哪个对象以及如何解决问题。
我还尝试在 ViewController 类中创建两个属性,一个用于保存原始图像,另一个用于保存插图。然而,它并没有解决问题。
为什么这是一个错误?为什么它不适用于带有插图的图像?我该如何解决这个问题?
谢谢。
【问题讨论】:
标签: iphone ios objective-c memory-management