我正在使用coverFlow视图为iPhone开发应用程序,当应用程序正在构建卡时,它正在使用UIView来添加标签和其他内容。然后我使用以下代码将UIView转换为UIImage:
UIGraphicsBeginImageContext(imageView.bounds.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// returning the UIImage
return viewImage;
每当我重新绘制封面流时,我都会有一个巨大的内存分配增量,即使我取消了我的coverFlow视图也不会减少。
我认为内存泄漏在我添加的代码中,你怎么看?
答案 0 :(得分:2)
您提供的代码段中没有明显的内存泄漏。由于UIGraphicsBeginImageContext()
,无法在后台线程上执行该操作,因此您应该有NSAutoreleasePool
(UIGraphicsGetImageFromCurrentContext()
的返回值是自动释放的)。如果没有进一步的信息,就无法分辨出内存泄漏的位置 - 我建议你查看最终拥有viewImage对象的任何对象,并确保在保留它的情况下正确释放UIImage。
答案 1 :(得分:0)
使用var mybuffer = new Float32Array(pcmDataFromSocket);
代替drawViewHierarchyInRect:afterScreenUpdates:
快15倍。
您可以在this article上看到比较结果。
另外,我已经创建了一个Swift扩展来执行此操作:https://stackoverflow.com/a/32042439/517707