4

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

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

// returning the UIImage
return viewImage;

每次我重绘封面流时,我都会有一个巨大的内存分配增量,即使我释放了我的封面流视图,它也永远不会减少。

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

4

2 回答 2

2

您提供的代码片段中没有明显的内存泄漏。由于 ,该操作无法在后台线程上执行UIGraphicsBeginImageContext(),因此您应该有一个NSAutoreleasePool适当的位置(的返回值UIGraphicsGetImageFromCurrentContext()是自动释放的)。如果没有进一步的信息,就不可能知道内存泄漏的位置——我建议您查看最终拥有 viewImage 对象的任何对象,并确保在保留 UIImage 时正确释放它。

于 2009-11-21T19:29:28.323 回答
0

使用它drawViewHierarchyInRect:afterScreenUpdates:代替renderInContext:快 15 倍

性能比较

你可以看到这篇文章的比较。

另外,我为此创建了一个 Swift 扩展:https ://stackoverflow.com/a/32042439/517707

于 2015-08-17T12:20:44.487 回答