Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在UIImageView中设置图像动画会占用太多内存_Objective C_Xcode - Fatal编程技术网

Objective c 在UIImageView中设置图像动画会占用太多内存

Objective c 在UIImageView中设置图像动画会占用太多内存,objective-c,xcode,Objective C,Xcode,我在动画序列中使用了150个图像 这是我的密码 NSMutableArray*arrImages=[[NSMutableArray alloc]initWithCapacity:0] for(int i = 0; i <=158; i++) { UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]; [arrImages addObject:image]; }

我在动画序列中使用了150个图像

这是我的密码

NSMutableArray*arrImages=[[NSMutableArray alloc]initWithCapacity:0]

for(int i = 0; i <=158; i++)
{
    UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]];
    [arrImages addObject:image];
}

babyimage.animationImages = arrImages;
[arrImages release];
for(int i=0;i代替

[UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]
使用

原因是imageNames缓存图像,直到释放内存警告后才会释放

编辑 另外,不要将整个图像存储到数组中,只要保存图像名称即可,或者不保存任何内容。这也会占用大量内存。

而不是

[UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]
使用

原因是imageNames缓存图像,直到释放内存警告后才会释放

编辑
另外,不要将整个图像存储到数组中,如果需要或不保存任何内容,只需保存图像名称。这也会占用大量内存。

我不知道动画是什么,因为您没有指定它。但是如果我正在编写代码,我将遵循以下算法

这是假设在特定时间只显示一个图像,但在过渡期间,最终将以某种方式进行两次卷积

procedureAnimate:
    photo_1 = allocate(file_address_array[i++])
    while i < MAX_PHOTOS
        photo_2 = allocate(file_address_array[i++])
        photo_3 = allocate(file_address_array[i++])
        perform_animation(photo_1, photo_2)
        release(photo_1)
        photo_1 = photo_2
        photo_2 = photo_3
    release(last_two)
程序重新激活:
photo_1=分配(文件地址数组[i++]
当我看到你的照片时
photo_2=分配(文件地址数组[i++]
photo_3=分配(文件地址数组[i++]
执行动画(照片1、照片2)
新闻稿(照片1)
照片1=照片2
照片2=照片3
释放(最后两次)
我不确定这是否是做这件事的完美方式,但这会更有效率


(alloc/release登录可能有严重问题,但这与我早上5点14分的工作一致)。如果不起作用,请告诉我。

我不知道动画是什么,您没有指定它。但是如果我正在编写代码,我将遵循以下算法

这是假设在特定时间只显示一个图像,但在过渡期间,最终将以某种方式进行两次卷积

procedureAnimate:
    photo_1 = allocate(file_address_array[i++])
    while i < MAX_PHOTOS
        photo_2 = allocate(file_address_array[i++])
        photo_3 = allocate(file_address_array[i++])
        perform_animation(photo_1, photo_2)
        release(photo_1)
        photo_1 = photo_2
        photo_2 = photo_3
    release(last_two)
程序重新激活:
photo_1=分配(文件地址数组[i++]
当我看到你的照片时
photo_2=分配(文件地址数组[i++]
photo_3=分配(文件地址数组[i++]
执行动画(照片1、照片2)
新闻稿(照片1)
照片1=照片2
照片2=照片3
释放(最后两次)
我不确定这是否是做这件事的完美方式,但这会更有效率


(可能alloc/release登录有严重问题,但这与我早上5:14的工作一致)。如果这不起作用,请告诉我。

这并没有真正的帮助,因为150个图像仍然需要立即加载到内存中…它们没有被缓存,但它们仍然被
arrmages
保留,因此它们不会被释放…@sergio我的应用程序中也有相同的功能,通过这种方式,我的应用程序崩溃不再是一个问题ming.我正在循环运行250个图像,每个图像的大小大约为250 kb。@P.J谢谢你的回复。我已经尝试过了,但是在所有图像加载时加载需要太多的时间。顺便说一句,非常感谢。@P.J:我明白了。在任何情况下,我想如果你在仪器中检查你的应用程序内存行为,你会发现它使用了很多内存,所以可能是你的设备不是崩溃,但另一个是…只是一个想法,因为完整的图像集必须加载到内存中,并保持在内存中,直到您释放图像数组。不过,我同意这是使用
imageNamed
的一个巨大改进,因为在这种情况下,应用程序的内存将在其剩余运行时收缩。@sergio是的,你是对的,在数组中存储图像也会占用大量内存。谢谢你指出这一点。这并没有真正的帮助,因为150个图像仍然需要立即加载到内存中…它们没有缓存,但它们仍然由
arrmages
保留,因此它们不会被释放…@sergio我的内存中也有相同的功能应用程序,通过这种方式,我的应用程序崩溃不再发生。我正在循环运行250个图像,每个图像的大小几乎为250 kb。@P.J感谢您的回复。我已经尝试过了,但是在加载所有图像时加载要花太多时间。顺便说一句,非常感谢。@P.J:我明白了。无论如何,我想如果您在内存中检查应用程序的行为你会发现它占用了大量内存,所以也许你的设备没有崩溃,但另一个只是一个想法,因为完整的图像集必须加载到内存中,并在释放图像阵列之前一直保持在内存中。我同意这是对使用
imageNamed
的巨大改进,因为如果应用程序的内存在运行时的剩余时间内会收缩。@sergio是的,您是对的,在数组中存储图像也会占用大量内存。谢谢您指出这一点。。