返回UIImage时EXC_BAD_ACCESS

时间:2010-11-17 10:55:47

标签: objective-c ios4 uiimage exc-bad-access

我有一个方法应该返回从contentsOfFile创建的UIImage(以避免缓存),但是当它返回时,我会收到EXC_BAD_ACCESS。通过仪器运行不会显示任何结果,因为它只是运行,而不是停在僵尸上。

图像已在Bundle Resources阶段正确复制......

- (UIImage *)imageForName:(NSString *)name {
    NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"png"];
    return [UIImage imageWithContentsOfFile:path];

}

此方法改编自PhotoScroller样本,该样本正常工作。

由于

编辑:

这是使用imageForName的代码,根据Luke / T的建议你可以看到我添加了retain,但EXC_BAD_ACCESS在返回时,而不是我的addObject:call:

NSMutableArray *images;

for (NSDictionary *dict in imageListForPage){
    [images addObject:[[self imageForName:[dict valueForKey:@"name"]]retain]];
}

3 个答案:

答案 0 :(得分:2)

ImageWithContentsOfFile将返回一个自动释放的对象。如果您没有保留它(返回[编辑]),那么您将获得不良访问权。

编辑:

检查NSarray的指针。您需要正常启动数组alloc或使用arraywith

e.g。

NSMutableArray *images = [NSMutableArray arrayWithCapacity:ARRAY_CAPACITY];//autoreleased

NSMutableArray *images = [[NSMutableArray alloc] init];//release later

答案 1 :(得分:0)

将对象添加到NSMutableArray会隐式发送retain,因此您的代码中不需要这样做。

您能否确认(使用NSLog()或断点)

[UIImage imageWithContentsOfFile:path]

返回imageForName:方法中的对象?

答案 2 :(得分:0)

最后,这段代码应该是:

NSMutableArray *images = [NSMutableArray new]; // new is same as [[alloc] init]

for (NSDictionary *dict in imageListForPage) {
  [images addObject:[self imageForName:[dict valueForKey:@"name"]]];
}
// ... do something with images
[images release];