1

我有这个代码:

imageNumber++;
UIImage *image = [[UIImage alloc]init];
            image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
            [imageToColor setImage:image]; //<-- here it crash 
            [image release];

所以,几分钟后我的应用程序因这条消息而崩溃

[UIImage isKindOfClass:]: message sent to deallocated instance

为什么??你能帮助我吗?

4

4 回答 4

4
imageNumber++;
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image];

您的代码的问题是您UIImage在图像变量上分配了一个对象,然后在不释放它的情况下将其设置为另一个自动释放的对象。[UIImage imageNamed:]返回一个自动释放的UIImage对象。

于 2012-04-27T13:22:57.790 回答
3

您正在分配一个新图像,然后将该指针分配给由 返回的自动释放 UIImage UIImage imageNamed:,导致内存泄漏,然后您尝试释放一个自动释放对象,该对象再次被释放,导致错误。

imageNumber++;
image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image]; //<-- here it crash 
于 2012-04-27T13:23:12.920 回答
0

好像你都搞错了。首先你 alloc-init 对象,然后将 autorelased 对象分配给指针,使第一个对象泄漏。这是正确的代码:

imageNumber++;
UIImage *image [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]];
[imageToColor setImage:image];
于 2012-04-27T13:23:38.643 回答
0

1) 在从文件加载图像之前,您不需要分配空图像。

2)您确定字符串 [NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber] 指定的图像确实存在并且可用于应用程序吗?

如果找不到该图像,则 imageNamed 调用将返回 null。在调试器中单步执行并查看图像是否实际加载。

于 2012-04-27T13:25:28.507 回答