使用 UIImagePickerController 时出现内存警告

2024-04-03

当我在 iPhone 上使用相机时收到内存警告。我也在使用 ARC。

当您拍照并按相机视图控制器上的“使用照片”按钮时,我会收到内存警告。目的是一旦按下“使用照片”按钮,它就会更改 ImageView 的内容。

我认为内存问题可能是由于捕获的图像是全屏的,并且ImageView是250h 250w。但我尝试缩小相机拍摄的图像的大小,然后将其分配给 ImageView。然而,即使我将其大小调整为 100 x 100,这仍然不起作用。

其次,我没有将相机拍摄的照片分配给ImageView,但它仍然有内存警告。

我在这里查看了其他答案并尝试了上面的两个答案,但它仍然存在。我将在下面展示我的代码。这会影响我向应用商店提交内容吗?当然,如果这种情况很常见,那么它是一个错误还是有解决方法?如果有人可以查看提供的代码并发现错误或建议如何处理此内存警告,那就太好了?

除了这个内存警告之外,我的应用程序已完成 95% 以上,因此已接近提交时间。

My code:

- (IBAction)takePhoto:(id)sender {

self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.delegate = self;
self.imagePicker.allowsEditing=NO;

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
     [self.imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    [self presentViewController:self.imagePicker animated:YES completion:NULL];

}
else{
    [self.imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [self presentViewController:self.imagePicker animated:YES completion:NULL];
 }



}

- (IBAction)choosePhoto:(id)sender {
self.imagePicker2 = [[UIImagePickerController alloc] init];
self.imagePicker2.delegate = self;
self.imagePicker2.allowsEditing=NO;
[self.imagePicker2 setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
[self presentViewController:self.imagePicker2 animated:YES completion:NULL];
}

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

self.image = [info objectForKey:UIImagePickerControllerOriginalImage];
CGRect rect = CGRectMake(0,0,100,100);

UIGraphicsBeginImageContext( rect.size );
[self.image drawInRect:rect];
UIImage *picture1 = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self.snapImage setImage:picture1];

[self.uploadImageBtn setHidden:NO];
[self dismissViewControllerAnimated:YES completion:NULL];
}

-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

[self dismissViewControllerAnimated:YES completion:NULL];
}

我没有找到好的解决方案,但我不会将原始图像存储在属性中,因为原始图像占用大约 30 MB 的内存。所以而不是:

self.image = [info objectForKey:UIImagePickerControllerOriginalImage];

我把它改为:

UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];

这样,图像不再使用时就会被销毁。注意:我已经在 iPhone 4 系列和 5 上测试了这种新方法。内存警告仅出现在 4 系列上,而不是 5 系列上。

从网络上看,已经有许多关于相机和 iOS7 的错误报告提交给了 Apple。例如,当你启动相机时,它会不定期地给出黑色预览 - 这与 iOS7 相关,尤其是 iPhone 4 系列而不是 5。这可能是处理器能力的差异 - 但我不确定。我的应用程序已获得应用程序商店批准,因此内存警告不会成为问题 -

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

使用 UIImagePickerController 时出现内存警告 的相关文章

随机推荐

  • 不使用 powershell 远程安装 .msi?

    我们有一个多服务器系统我们需要在客户端安装 我想编写一个脚本 可以 关闭远程机器上的服务 卸载多台远程计算机上的软件 在多个远程计算机上安装 msi 文件 我曾挣扎过psexec and wmic做第 2 点和第 3 点 似乎必须有一种更简
  • Python 日志记录重复

    我有四个文件 Main py A py B py 日志系统 我正在使用 main 来使用 A py 和 B py 的函数 所以现在我必须在调用它们时记录所有信息 所以我编写了一个名为 log system 的脚本来为每个脚本文件 例如 A
  • Perl:Javascript::V8 模板 - 来自 Perl

    寻找像 HTML Mason 或 Mason 这样的模板引擎 那么什么将源组件 编译 为 perl 代码 而不是 perl 代码将组件 编译 为 JavaScript 代码 然后使用 Javascript V8 运行 执行它们Perl 模块
  • 可以使用 XSLT 将 XML 拆分为多个页面吗?

    我有一个带有分页指示的 XML 文档 我想将这个单个文件转换为多个输出文件 也就是说 我想转换以下内容
  • 针对 Azure AD 的 WebForms 身份验证

    我有一个 WebForms 站点 它在内部服务器上运行 并根据我们的内部 Active Directory 对用户进行身份验证 由于我们正在实施一些新功能 该网站需要移动到外部服务器 然后更改身份验证 以便根据我们的 Office 365
  • 覆盖 Altair 折线图的默认分组?

    我想制作一张图表 其中一条线在沿线的不同位置具有不同的颜色 这不起作用 import altair as alt import numpy as np import pandas as pd x np linspace 0 1 y x 2
  • 禁用/隐藏辅助功能元素

    我试图从 VoiceOver 中隐藏应用程序中的多个元素 以便屏幕阅读器不会大声朗读它们 在 iOS 上 我设置isAccessibilityElement to NO 但这对 OSX 没有影响 从 VoiceOver 隐藏元素的正确方法是
  • Firebase LatLng 缺少不带参数的构造函数

    我将坐标存储在实时数据库中 但在尝试检索数据时收到错误消息 错误信息是 com google firebase database DatabaseException com google android gms maps model Lat
  • np.argsort 和 pd.nsmallest 给出不同的结果

    示例数据和代码如下 import pandas as pd import numpy as np np random seed 2021 dates pd date range 20130226 periods 90 df pd DataF
  • 由于 Windows 更新,Azure 云服务应用程序(Web 角色)偶尔会停机约 10 分钟?我该如何安排它们?

    它似乎每隔几个月左右就会发生一次 虽然它通常会在大约 10 分钟内自动恢复 但我仍然想了解如何更改 Windows 更新计划 因为它经常在工作时间发生 我们在各种 Azure 订阅中有多个 Web 应用程序 它们都以这种方式运行 一旦我们收
  • 并排 div

    如何并排放置两个 div 并在它们之间使用分离器 那就是我的意思 我假设 html 布局看起来像这样 div div div div div div div div or div div div div div div div div ht
  • 通过 HTTPS 以 JSON 格式发送密码是否安全?

    如果我通过 HTTPS 发送 JSON 格式的密码来执行身份验证 安全吗 有更好的方法吗 一般来说 将用户名和密码发送到服务器以执行身份验证的最佳方法是什么 一般来说 是的 这对于被动网络窃听者是安全的 这是人们在这种架构中担心的主要威胁
  • 预加载器继续加载并且在加载内容时不会消失

    好的 首先 这是我的代码 var loader document getElementById loader window addEventListener loader function loader style display none
  • 是否有与 C++ std::partial_sort 等效的 C# ?

    我正在尝试为可通过许多标准排序的数据集实现分页算法 不幸的是 虽然其中一些标准可以在数据库级别实现 但有些必须在应用程序级别完成 我们必须与另一个数据源集成 我们有分页 实际上是无限滚动 要求 并且正在寻找一种方法来最大程度地减少每次分页调
  • ASP.NET-Identity:如何限制用户名长度?

    我怎样才能限制长度UserName表中的字段AspNetUsers 这都不是 public class ApplicationUser IdentityUser Required MaxLength 15 public string Use
  • C# 7 基于元组的变量交换线程安全吗?

    在 C 7 的元组之前 交换两个变量的标准方法如下 var foo 5 var bar 10 var temp foo foo bar bar temp 但现在我们可以使用 foo bar bar foo 它在一条线上 而且更漂亮 但它是线
  • 绘图错误“您的浏览器不支持 WebGL”

    我正在尝试使用创建一些 3D 绘图plotly包裹 我使用的代码是他们的教程示例 library plotly volcano is a numeric matrix that ships with R fig lt plot ly z v
  • 使用 RC.EXE 或 BRCC32.EXE 构建 *.rc 文件时包含文件的行为有所不同

    我希望在我的 Delphi 项目的 RC 文件中使用点 作为资源条目 但是 Delphi 的 BRCC32 exe 不允许在资源命名中使用点 从Delphi 2010开始 我们可以在中指定 要使用的资源编译器 Project Option
  • 非常简单的 Firestore 事务失败

    我正在为一项超级简单的交易而苦苦挣扎 它总是失败并显示消息 事务所有重试均失败 但除此之外没有任何错误消息logcat 当我调试它时 我发现它被重试了几次 我真的不知道为什么 因为其他交易运行没有问题 我只想将一个文档从一个集合克隆到另一个
  • 使用 UIImagePickerController 时出现内存警告

    当我在 iPhone 上使用相机时收到内存警告 我也在使用 ARC 当您拍照并按相机视图控制器上的 使用照片 按钮时 我会收到内存警告 目的是一旦按下 使用照片 按钮 它就会更改 ImageView 的内容 我认为内存问题可能是由于捕获的图