无法在 iOS 上将 CIImage 保存到文件而不发生内存泄漏

2024-04-09

下面的代码片段保存了一个CIImage到磁盘使用UIImage.

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSString* filename = @"Test.png";

    UIImage *image = [UIImage imageNamed:filename];

    // make some image processing then store the output
    CIImage *processedImage = [CIImage imageWithCGImage:image.CGImage];

#if 1// save using context

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgiimage = [context createCGImage:processedImage fromRect:processedImage.extent];
    image = [UIImage imageWithCGImage:cgiimage];

    CGImageRelease(cgiimage);

#else

    image = [UIImage imageWithCIImage:processedImage];

#endif

    // save the image

    NSString *filePath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[@"../Documents/" stringByAppendingString:filename]];

    [UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
}

然而,它泄漏了CGImageRef即使通过调用释放它CGImageRelease

如果该行与#if 1更改为#if 0, the UIImage是直接从创建的CIImage并且没有内存泄漏,但是UIImage未保存到磁盘


将保存包装在自动释放池中:

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSString* filename = @"Test.png";

    UIImage *image = [UIImage imageNamed:filename];

    // make some image processing then store the output
    CIImage *processedImage = [CIImage imageWithCGImage:image.CGImage];

    @autoreleasepool {
        CIContext *context = [CIContext contextWithOptions:nil];
        CGImageRef cgiimage = [context createCGImage:processedImage fromRect:processedImage.extent];
        image = [UIImage imageWithCGImage:cgiimage];

        CGImageRelease(cgiimage);

        // save the image
        NSURL *documentsDir = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
        NSURL *fileURL = [documentsDir URLByAppendingPathComponent:filename];

        [UIImagePNGRepresentation(image) writeToURL:fileURL atomically:YES];
    }
}

另请注意,我更新了您检索 Documents 目录以适用于 iOS 8 的方式(更多信息 https://developer.apple.com/library/ios/technotes/tn2406/_index.html).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 iOS 上将 CIImage 保存到文件而不发生内存泄漏 的相关文章

  • SwiftUI 模态视图

    从任何类或结构中模态显示 SwiftUI 视图的最佳方式是什么 我使用 UIKit 中的 UIHostingController 有没有更好的方法只使用 SwiftUI 来做到这一点 带有用于呈现 SwiftUI 视图的按钮的 Conten
  • ios7 中的自动续订订阅

    我知道这个问题已经被问过很多次了 但没有一个问题对我有帮助 而且我不确定这些答案中哪些在 iOS 7 中仍然有效 我正在做一些带有自动续订订阅的应用程序 我已经成功创建了我的产品 我可以与测试用户一起购买它 我的问题是 检查特定用户是否仍然
  • 为什么内存泄漏很常见?

    是否是由于程序员对内存如何动态分配和释放的基本误解造成的 是因为自满吗 不 这是因为跟踪每个内存分配需要进行大量的计算 谁负责分配内存 谁负责释放它 确保您使用相同的 API 来分配和释放内存等 确保您捕获每个可能的程序流并在每种情况下进行
  • videoMinFrameDuration 已弃用

    当我将 Xcode 从 4 6 更新到 5 1 时 ios7 中不推荐使用 videoMinnFrameDuration void setFrameRate NSInteger frameRate frameRate frameRate i
  • 如何给objc_exception_throw添加断点?

    这是布拉德 拉森对此的回答SO https stackoverflow com questions 1093999 stack trace or more info on unhandled exception in xcode iphon
  • 将视图控制器推送到 UINavigationController 中

    我有一个带有导航控制器的选项卡视图控制器 在第一个选项卡项中 我单击视图中的按钮 弹出一个带有动画的视图 是 然后 当该视图完成后 我点击另一个按钮将其关闭 喜欢 self dismissViewControllerAnimated NO
  • Swift 2:IBOutlet 集合 [UIButton]!内存泄漏

    最近在我的应用程序中 我发现我的 UIButton 出口集合正在泄漏内存 我所拥有的只是 IBOutlet var TabBarButtons UIButton And from Instrument 谁能告诉我出了什么问题吗 随着时间的推
  • C++ 构造函数抛出异常时销毁对象的成员变量

    这个问题是基于 Scott Meyers 在他的书 更有效的 C 中提供的一个例子 考虑下面的类 A class to represent the profile of a user in a dating site for animal
  • 内存泄漏?!在“array_map”中使用“create_function”时,垃圾收集器是否正确?

    我在 StackOverflow 上找到了以下解决方案 从对象数组中获取特定对象属性的数组 PHP 从对象数组中提取属性 https stackoverflow com questions 1118994 php extracting a
  • 为什么我的 UITableView 顶部有额外的填充,样式为 UITableViewStyleGrouped 在 iOS7 中

    从 iOS7 开始 我的顶部有额外的空间UITableView有一种风格UITableViewStyleGrouped 这是一个例子 tableview从第一个箭头开始 有35个像素的不明填充 然后绿色标题是UIView由返回viewFor
  • 如何将故事板连接到视图控制器

    在新的 xcode 5 中 如何在界面生成器中使用下拉菜单将故事板视图控制器连接到类 现在这是如何完成的 除非我误解了你的要求 否则它仍然存在 以下是将自定义视图控制器类分配给视图控制器的步骤 在左侧场景列表中选择您的视图控制器 选择右侧的
  • NET/COM 互操作的 ref string[] 内存泄漏

    我最近发现一个非常奇怪的 对我来说 内存泄漏IEnumString http msdn microsoft com en us library ms693735 28VS 85 29 aspxC 使用的 COM 对象 具体来说 使用已包含先
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • 自调整大小的集合视图在 iOS 15 中进入递归循环

    我有一个自动调整大小的集合视图 当我调用 super layoutSubviews 时 我的应用程序崩溃 因为集合视图进入递归更新循环 这在 iOS 14 及更低版本中运行良好 但从 iOS 15 开始就观察到了这一点 class Dyna
  • 使用 Metal 高效计算 UIImage/CIImage 中有多少透明像素

    我们可以计算有多少个透明像素的最快方法是什么CIImage UIImage 例如 如果我们谈论效率 我的第一个想法是使用Metal Kernel使用任一CIColorKernel左右 但我不明白如何使用它来输出 计数 我还有其他想法 使用某
  • 在后台每 X 分钟执行一次函数不起作用

    我使用此代码每 X 分钟执行一次函数 void executeEveryOneMinute self myFunction dispatch after dispatch time DISPATCH TIME NOW int64 t 60
  • iOS 7 导航栏颜色在 iPhone 4 上无法正确显示

    我的导航栏颜色在 iOS 7 中正常显示 部署iOS 6 0 但如果系统版本是iOS 7 0或更高版本 部分导航栏颜色在iPhone 4上无法正常显示 在iPhone 5上工作正常 我是这样做的 if SYSTEM VERSION GREA
  • UITextView:内存使用量巨大

    我在 UITextView 中遇到了内存使用过多的问题 我正在将 50Kb ascii 文本文件加载到 NSString 中 并将其分配给应用程序中空 UITextView 组件的 text 属性 这立即使我的内存占用量增加了 100Mb
  • 如何解决 iOS 6 SDK 中的 hidesBottomBarWhenPushed 行为异常的问题?

    我遇到了中描述的相同问题这个 OpenRadar 问题 http www openradar me 14670329 正如那里所说 摘要 UIViewController的hidesBottomBarWhenPushed属性 对于使用 iO
  • 动画 UICollectionView 单元格大小更改并重新定位周围单元格

    Goal 以动画方式改变单元格的高度并重新定位周围的单元格 设想 集合视图中的某些单元格会加载远程图像 最初 这些单元格的大小是静态的 并显示活动指示器 加载图像后 会将其添加到其单元格中 并且更改单元格的高度以适合照片 Notes 我正在

随机推荐

  • Django与领域和自身的多对多关系独特

    我尝试使用语言和内容创建帖子 并将其与同一页面的其他版本相关联 但我陷入困境 class Page models Model content models TextField language models CharField max le
  • 如何在android中使用用户当前位置获取邮政编码

    我正在尝试获取邮政编码 但无法获取邮政编码 邮政编码 我可以获取当前城市 但是当我尝试获取邮政编码时 它给了我一个空指针异常 谁能帮我 final Geocoder gcd new Geocoder getApplicationContex
  • 字符的序数/int/ascii 值

    在 clojure repl 中我可以这样做 gt int a 97 在闭包脚本中 我不断得到 gt int a 0 在我当前的 clojurescript 项目中 我定义了一个 var def ord a int a 当我检查发出的 ja
  • C:将值扫描到数组中与常量的相等性进行比较的问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我对 C 完全陌生 现在我正在尝试掌握基础知识 但在从 scanf 读取数据和填充数组时遇到问题 根据我的观察 我认为问题出在 s
  • 有没有办法在android 2.1中不使用动画来旋转按钮

    我正在寻找旋转按钮的方法 不使用动画 我不想使用动画 因为this https stackoverflow com questions 8037185 onlclick listener is not working properly 如果
  • 如何向这个 elm 效果示例添加第二个骰子?

    我是 Elm 新手 一直在查看以下示例 请注意 这是在较新的 0 17 架构下 其中 Action 现在是 Command http elm lang org examples random http elm lang org exampl
  • mysql查询失败时是否有错误日志记录?

    我很好奇当我执行查询时 MySQL 数据库是否记录任何错误 我知道我打电话mysql 错误 http php net manual en function mysql error php检索错误 但数据库端是否还有其他日志记录 默认情况下
  • 用于数据库备份的Linux shell脚本

    我尝试了很多数据库备份脚本 但我无法成功 我想每小时备份一次数据库 我将文件添加到 etc cron hourly 文件夹 将其 chmod 更改为 755 但它没有运行 至少我写了我的伪代码 如果您能为该操作编写一个脚本并告诉我我还应该做
  • 为jade文件中的变量赋值

    是否可以在jade文件中分配变量 以使代码更具可读性 具体来说 我创建了这个jade文件 extends layout var format 1 0f block title title Your score table block bod
  • 如何声明依赖关系

    我正在研究 Dagger 2 所以我想了解一些基本的东西 我有以下代码 Module public class MainModule Provides public Presenter provideMainActivityPresente
  • 在头文件中声明 extern 结构模板以在 c 文件中全局使用

    我的目标是声明和定义一个结构template在我的头文件中 然后我希望使用这个模板来声明和定义个人我的 c 文件中的结构 这是我的目标的一个粗略示例 头文件 include
  • 如何在 ruby​​ 中读取 INI 文件

    如何在 ruby 中读取 写入 ini 文件 我有一个需要的 ini 文件 read 更改条目 写出到不同的位置 我该如何在红宝石中做到这一点 关于这一点的文档是黯淡的 使用 InIFile Gem 正如 method所说 使用inifil
  • js中压缩一串0和1

    介绍 我目前正在用 js 开发 John Conway 的 Game of Life 我的游戏可以运行 在这里查看 http goljs github io GoL 我正在开发额外的功能 例如与您的朋友分享您的 网格 游戏 为此 我将网格的
  • 如何使用fastify-cors实现仅一个api跨域?

    我想让 POST 本地主机 产品 只是这个API可以跨域 我不知道该怎么做 fastify register require fastify cors origin methods POST 这是我的 API method POST url
  • 如何定义软件的版本号?

    确定软件或组件应使用的版本号的最佳方法是什么 设置版本号有通用规则吗 我很确定这是一个基本问题 但搜索一段时间后我没有找到任何有用的东西 微软有一个约定 major minor revision build 或关注Jeff 的版本控制系统
  • 如何使用 Ansible 在远程文件中搜索字符串?

    基于一个问题 如何使用 Ansible 在文件中搜索字符串 https superuser com a 1764857 754490 Ansible 如何从文件内容中提取特定字符串 https stackoverflow com a 750
  • 如何让 Emacs 自动缩进我的 C 代码?

    我刚刚开始熟悉 emacs 但我对它在我按回车键时不缩进的趋势感到沮丧 我知道如果我按 C j 就会执行此操作 但我无法养成这种习惯 我就是不能 我需要按回车键 而且我讨厌每次都重新切换 我进入选项并找到 C 模式挂钩和 C 模式挂钩等 他
  • 如何将字符串转换为 CLLocationDegrees Swift 2

    我正在尝试转换从 Firebase 检索的字符串并将其添加为 Google 地图上的多个注释 不幸的是 每当我的应用程序执行当前代码时就会崩溃 ref FIRDatabase database reference ref child Loc
  • 如何在 Scala 中使用 JUnit ExpectedException?

    我希望能够使用 JUnit 4 7预期异常 Rule http kentbeck github com junit javadoc latest org junit rules ExpectedException html在斯卡拉 然而 它
  • 无法在 iOS 上将 CIImage 保存到文件而不发生内存泄漏

    下面的代码片段保存了一个CIImage到磁盘使用UIImage void applicationWillResignActive UIApplication application NSString filename Test png UI