我使用[myimageview.image release]发布图像;
但在应用程序处于后台之后它再次出现前景,它再次释放该图像,所以它崩溃了!我所有尝试检查应用程序是否来自后台都没有用。 那我怎么能检查一个物体是否已经被释放..所以我不做两次?
thankx 克里斯
EDIT 几次抱怨我的编码错误:)这里有一个例子:
首先,我使用许多全屏图像的路径初始化一个数组 此外,还有10种不同的阵列可用于10种不同的场景。 当我把图像直接放在一个数组中时,它只需要从一开始就需要很多内存,或者当我完全释放一个场景时,它需要再次加载整个图像阵列而且速度变慢。所以我只是将图像的路径加载到一个数组中,并在运行时将每个图片循环分配给我的imageview。
初始一次: imageArray_stand = [[NSArray alloc] initWithObjects: @ “FrankieArmeRaus_0001.jpg” ...最多60张图片 @ “FrankieArmeRaus_0061.jpg”,零];
在一个叫做每个1/10秒的循环中:
if ([myimageview.image retainCount] > 1)
//if ( myimageview.image != nil) // does not work = crash
{
[myimageview.image release];
myimageview.image = nil;
}
myimageview.image = [UIImage imageNamed:[imageArray_stand2 objectAtIndex:piccounter-1]];
问题出现了,因为当应用程序进入后台并再次进入前景时,它似乎会释放图像2次,所以我需要一个解决方案来检查它。
我很高兴任何解决方案(现在它的工作原理)更好。 甚至将所有图像完全加载到一个数组中,但如上所述,它需要很多内存并重新分配,而运行时需要很长时间才能加载。 (50张图像1秒)
此外,我需要RELASE并设置为NIL,否则它甚至会使我的内存使用超出限制。
答案 0 :(得分:2)
你永远不会永远,释放另一个对象的属性。您释放整个myimageview
对象,或者只是分配给它的属性。这些属性是如何管理内存的是myimageview
对象的私有业务。
答案 1 :(得分:0)
最简单的方法是做这样的事情:
if (someObject != nil)
{
[someObject release];
someObject = nil;
}
但是,我不认为你应该发布myimageview.image,假设myimageview是UIImageView
。 UIImageView负责管理其图像;你不应该搞乱它的保留计数。
也许你真正想做的是:
myimageview.image = nil;
这将导致myimageview
释放并停止指向现在无效的内存。
答案 2 :(得分:-2)
用
解决了if([myimageview.image retainCount]> 1)[myimageview.image release];