2012-04-27 57 views
1

我有这样的代码:IOS:UIImage的发送到释放实例

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
imageNumber++; 
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"l%d_s%d.png", currentSet, imageNumber]]; 
[imageToColor setImage:image]; 

与您的代码的问题是,你像可变分配UIImage对象,然后不释放它,你将它设置为另一个自动释放的对象。 [UIImage imageNamed:]返回一个自动发布的UIImage对象。

+0

好的,但是什么原因导致我的应用程序在几分钟后崩溃而不是立即崩溃,你能解释我吗? – CrazyDev 2012-04-27 13:29:45

+0

自动释放的对象不会立即释放 – ssteinberg 2012-04-27 13:30:26

+0

好的谢谢....... – CrazyDev 2012-04-27 14:35:27

3

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

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

好像你弄错了一切。首先分配init对象,然后将自动重新对象分配给指针,使第一个对象泄漏。下面是正确的代码:

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

1)你并不需要从文件加载图像之前分配一个空的图像。 2)你确定由字符串[NSString stringWithFormat:@“l%d_s%d.png”,currentSet,imageNumber]指定的图像实际上是否存在并且可用于应用程序?

如果无法找到该图像,则imageNamed调用将返回null。在调试器中逐步查看图像是否实际加载。

相关问题