UIImageJPEGRepresentation - 内存释放问题

2023-12-14

在iPhone应用程序上,我需要通过邮件发送最大尺寸为300Ko的jpg(我不知道mail.app可以有的最大尺寸,但这是另一个问题)。为此,我尝试降低质量,直到获得低于 300Ko 的图像。

为了获得给我300Ko以下的jpg的质量(压缩级别)的良好价值,我做了以下循环。 它正在工作,但是每次执行循环时,尽管有“[tmpImage release];”,内存还是会增加我的jpg(700Ko)原始大小的大小。

float compressionLevel = 1.0f;
int size = 300001;
while (size  > 300000) {
    UIImage *tmpImage =[[UIImage alloc] initWithContentsOfFile:[self fullDocumentsPathForTheFile:@"imageToAnalyse.jpg"]];
    size = [UIImageJPEGRepresentation(tmpImage, compressionLevel) length];
    [tmpImage release];
        //In the following line, the 0.001f decrement is choose just in order test the increase of the memory  
    //compressionLevel = compressionLevel - 0.001f;
    NSLog(@"Compression: %f",compressionLevel);
} 

关于如何摆脱它或为什么会发生这种情况有什么想法吗? 谢谢


至少,在循环的每次行程中分配和释放图像是没有意义的。它不应该泄漏内存,但这是不必要的,因此将 alloc/init 和release移出循环。

此外, UIImageJPEGRepresentation 返回的数据是自动释放的,因此它会一直保留,直到当前释放池耗尽(当您返回主事件循环时)。考虑添加:

NSAutoreleasePool* p = [[NSAutoreleasePool alloc] init];

在循环的顶部,并且

[p drain] 

在最后。这样你就不会泄漏所有的中间内存。

最后,对最佳压缩设置进行线性搜索可能效率很低。改为进行二分搜索。

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

UIImageJPEGRepresentation - 内存释放问题 的相关文章

  • 为什么使用 UIImageJPEGRepresentation 方法通过 writetofile 保存的 .jpeg 文件大小比 ios 中的 UIImageWriteToSavedPhotosAlbum 大

    我正在尝试拯救一个UIImage设备中 jpeg 文件的对象 我正在使用这段代码 void saveImageToDocumentsDirectory UIImage mimage withFileName NSString fileNam
  • 允许用户从 UILabel 选择文本进行复制[重复]

    这个问题在这里已经有答案了 我有一个 UILabel 但如何允许用户选择其文本的一部分 我不希望用户能够编辑文本 也不希望标签 文本字段具有边框 这是不可能的UILabel 你应该使用UITextView为了那个原因 只需使用禁用编辑即可t
  • Objective c:如何只删除目录下的所有文件但保留目录本身

    我发现下面的代码可以删除objective c中的文件 但我只想删除目录下的所有文件Caches并保留目录Caches itself 有人可以建议这样做的方法吗 Thanks NSFileManager filemgr filemgr NS
  • 32位进程在64位操作系统上可以访问多少内存?

    在 Windows 上 正常情况下 32 位进程只能访问 2GB RAM 或通过 boot ini 文件中的特殊开关访问 3GB 在 64 位操作系统上运行 32 位进程时 有多少可用内存 是否有任何特殊的开关或设置可以改变这种情况 默认
  • iPhone Core Graphics 子视图的粗虚线

    我有一个UIView在其中我通过覆盖使用 Core Graphics 画了一条线drawRect 该视图还包含一个子视图 该子视图也绘制一条线 然而 虽然两个视图都使用几乎相同的代码 至少出于测试目的 但在它们上绘制的线看起来并不相同 正如
  • 如何查找哪个注释发送了showDetails?

    如何查找哪个注释发送了showDetails MKPinAnnotationView customPinView MKPinAnnotationView alloc initWithAnnotation annotation reuseId
  • iphone:通过代码获取目标设置中的用户定义变量?

    我的项目有多个目标 每个目标都有自己的目标Class用于设置内容的文件 我想存储它Class目标设置中的名称 Info plist或目标的建筑物设置 这样我就可以根据此设置定义每个目标中需要使用哪个类 根据这个问题 https stacko
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • 如何添加授权以从新钥匙串对应用程序进行代码签名,而无需任何人工交互

    我正在尝试使用特定证书自动化构建 iPhone 应用程序的过程 因此 想象一下 如果不同的用户将他们的证书上传到系统中 并且可以立即用于代码签名 我想在没有任何交互的情况下做到这一点 我也不想用不同的用户证书弄乱系统或登录钥匙串 为此我有
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • 通过 iPhone 连接到 AT&T 无线网络的谷歌静态地图无法工作 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 最近 当我的 iPhone 连接到 AT T 无线网络时 我在检索静态地图时遇到了问题 但是 当我连接到本地 WiFi 时工作正常 上周日停止工作了几
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 蓝牙 4.0 与较旧的蓝牙

    我正在尝试使用蓝牙 4 0 模块实现一个应用程序 我想知道将此应用程序与包含简单蓝牙 2 1 EDR 模块的 Iphone 3GS 一起使用是否能让我利用 4 0 模块中的低功耗 谢谢您的回答 蓝牙 4 0 是标准 其中包括经典蓝牙基本速率
  • 应用程序发布后,对如何更新 UITableView 上的数据源感到困惑

    阅读文档后 我似乎误解了有关数据管理的一些概念 所以我试图澄清一些方面 如果这篇文章听起来多余和重复 请道歉 我的应用程序有多个 TableView 每个表视图都有一个 pList 形式的数据源 因此 我有几个属性列表用作我的表的数据源 目
  • AS3 内存泄漏示例

    有人可以发布一个 as3 代码的示例 特别是包括事件侦听器 这将是一个可能泄漏内存的简单示例 也希望您能发布所显示问题的解决方案吗 问题是 AS3 事件监听器中内存泄漏的一个简单示例是什么 如何解决它 public class MySpri
  • iPhone:在命令行 (Mac OS X) 中压缩 .app 文件会删除 CodeSigning

    我正在尝试使用 TeamCity 对我的 iPhone 应用程序进行简单的构建自动化 但遇到了这个棘手的问题 当我从构建文件夹中手动拾取并安装 app 文件时 效果很好 与 iTunes 顺利同步 我可以在手机上看到该应用程序 但是 当我尝
  • 自定义 UISearchDisplayController

    替代文本 http img210 imageshack us img210 5992 searchdisplaycontroller png http img210 imageshack us img210 5992 searchdispl
  • 是否有一个类可以获取应用程序中的默认图片查看器?

    我不想访问 iPhone 上的图像 我想显示我的应用程序中的图像 但就像您查看 iPhone 相册中的图片一样 使用所有捏合和缩放控件等 这可能吗 我认为可能 偶然 有像 AVMediaPlayer 类这样的类可以做到这一点 谢谢 汤姆 如
  • 如何将 Cocoa 应用程序移植到 iPhone-OS?

    我即将创建一个 Cocoa 应用程序 我想确保有一天我可以轻松地将它移植到 iPad 甚至 iPhone 我该如何提前计划 我知道我将不得不重做所有 NIB 并可能设计一个不同的工作流程 但是代码呢 仅仅用 UIsomething 替换每个

随机推荐

  • 如何从C++文件中读取空格分隔的信息

    在文本文件中 我将有一行包含一系列数字 每个数字用空格分隔 我如何读取这些数字并将它们全部存储在一个数组中 std ifstream file filename std vector
  • 多次加入同一张表

    我可能有点笨 希望有人能帮忙 我有一个简单的 2 列用户表 ID 用户名 我有一个图像评论表 COMMENT COMMENTFROM COMMENTTO COMMENTFROM 是发表评论的用户的 ID COMMENTTO 是添加评论的图像
  • 在 MS Access 中引用可重用表单(2 层)

    我有多个成员 每个成员都有一条包含多个备注字段的记录 Member ID Entry A Entry B 1 memo text memo text 2 memo text memo text 3 memo text memo text 在
  • 在嵌套类中,如何从Python中的嵌套类访问外部类的元素?

    我有这样的场景 我需要要求嵌套类将项目附加到外部类中的列表中 这是伪代码 与我尝试做的类似 我该如何让它发挥作用 class Outer object outerlist class Inner object def call self a
  • 如何在 R 代码中将数据框旋转到二级标题上

    I m still new to R and I ve been struggling with this issue for a couple of days I found some solutions but I m looking
  • Struts2 ActionContext 和 ValueStack?

    我的问题是 在Struts2中 是不是每个action对象都有自己对应的ActionContext和ValueStack呢 换句话说 对于每个新请求 都会创建一个新的操作对象 这是否意味着每次创建新的操作对象时 也会创建新的 ActionC
  • 如何使用 Xcode 4.5 为 iPhone 4 和 iPhone 5 创建 xib

    我已将部署目标设置为 iOS 4 3 并使用 xib 创建视图控制器 但 XCode 4 5 仅为 iPhone 5 4 英寸 创建 xib 如何为 iPhone 4 创建单独的 xib 在视图属性检查器的 模拟指标 部分中 您可以选择 3
  • 如何获取我在 Jquery Tabs UI 中命名的当前选项卡标题

    我在用着http jqueryui com demos tabs manipulation 我想获取我之前命名的当前选定选项卡的标题 例如 来自 href 如何获得 我试过 ui tab attr href 获取选项卡标题的替代方法 var
  • shell 脚本中 test / [ 中的 -d、-e 和 -f 标志有什么区别?

    有什么区别 d e f在 shell 脚本中 我试图理解之间的区别 e d and f参数 例子 if d path if e path if f path 据我所知 d检查目录是否存在 e检查目录和内容 如果目录存在且包含内容则返回 tr
  • Selenium - send_keys() 发送不完整的字符串

    我的问题 我有一个填充字段的方法 但问题是 selenium 没有将完整的字符串发送到该字段 所以我的断言在验证时失败 My code var webdriver require selenium webdriver var casual
  • ios接收udp广播包

    我几乎完全完成了 REST 服务的 iOS 客户端 我唯一缺少的是客户端能够在网络上侦听 UDP 广播 该广播接收主机显示名称和上传的基本 URL 网络上可能有多个服务器正在广播并等待上传 异步是首选 当设备发现服务器时 服务器将显示给用户
  • Android 中的相机预览质量很差

    我正在 Android 中制作一个相机应用程序 并使用以下函数来获取预览尺寸 private Size getOptimalPreviewSize List
  • 当 DNS 无法访问时 URLConnection.setConnectTimeout() 不起作用

    这是我的代码 URL u new URL http www google com URLConnection conn u openConnection conn setConnectTimeout 3000 conn connect 我的
  • 将第 i 个向量编号插入数据框列名称 - R

    这可能是一个快速修复 我试图将向量的第 i 个位置放入数据框列名称中 我正在尝试使用 Paste0 输入第 i 个数字 sma lt 2 20 gt sma 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • 使用 sed 在第 N 个匹配模式后插入一些文本

    我怎样才能这样做呢 我有多个例如我的文件中存在 foobar 模式 如何在例如之后添加第四个 some text 以下内容对您有用吗 sed a N ba s foobar 1 nsome text 4 inputfile 对于输入 cat
  • x:Shared = 默认为 false

    是否可以设置x Shared false默认情况下以某种方式 我有很多ResourceDictionary我在添加新项目时经常忘记设置它 这只能在运行时发现 额外问题 Why x Shared智能感知从未显示过 有没有办法来解决这个问题 不
  • JavaScript:条件(三元)与布尔 OR 对于非布尔值?

    在 JavaScript 中 我是否可以始终使用布尔 OR 而不是条件运算符来处理所有类型的变量 例如字符串 函数 例如z x y 代替z x x y 它们很相似 但又不完全相同 x x y最终评估x两次如果x被选中 如果出现以下情况 这可
  • 从动态视图中识别按钮

    我已经为动态布局编写了这段代码 我使用这个循环生成一对按钮 这是我生成它们的代码部分 for int i 1 i lt 2 i Button button1 new Button this button1 setTag age button
  • 如何在 Likert 图的每个条形上输出正确的百分比?

    我试图让我的代码在每个单独的条形顶部输出百分比 现在 下面显示的百分比是错误的 我的代码组合了标签 1 和 2 以及标签 3 和 4 然后在不正确的一侧输出这些数字 是否有一个功能可以正确标记这些条形 我包括我的代码 csv 文件中的数据以
  • UIImageJPEGRepresentation - 内存释放问题

    在iPhone应用程序上 我需要通过邮件发送最大尺寸为300Ko的jpg 我不知道mail app可以有的最大尺寸 但这是另一个问题 为此 我尝试降低质量 直到获得低于 300Ko 的图像 为了获得给我300Ko以下的jpg的质量 压缩级别