将UIview转换为导致内存泄漏的UIimage

时间:2009-11-21 16:02:04

标签: iphone uiview uiimage coverflow

我正在使用coverFlow视图为iPhone开发应用程序,当应用程序正在构建卡时,它正在使用UIView来添加标签和其他内容。然后我使用以下代码将UIView转换为UIImage:

UIGraphicsBeginImageContext(imageView.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// returning the UIImage
return viewImage;

每当我重新绘制封面流时,我都会有一个巨大的内存分配增量,即使我取消了我的coverFlow视图也不会减少。

我认为内存泄漏在我添加的代码中,你怎么看?

2 个答案:

答案 0 :(得分:2)

您提供的代码段中没有明显的内存泄漏。由于UIGraphicsBeginImageContext(),无法在后台线程上执行该操作,因此您应该有NSAutoreleasePoolUIGraphicsGetImageFromCurrentContext()的返回值是自动释放的)。如果没有进一步的信息,就无法分辨出内存泄漏的位置 - 我建议你查看最终拥有viewImage对象的任何对象,并确保在保留它的情况下正确释放UIImage。

答案 1 :(得分:0)

使用var mybuffer = new Float32Array(pcmDataFromSocket); 代替drawViewHierarchyInRect:afterScreenUpdates: 快15倍

Performance comparison

您可以在this article上看到比较结果。

另外,我已经创建了一个Swift扩展来执行此操作:https://stackoverflow.com/a/32042439/517707