Swift 4 中的 UIImagePickerController 内存泄漏 Xcode 9

2023-12-04

在我的应用程序中,当我使用UIImagePickerController,我以为是我的应用程序的问题,但是在搜索解决方案时我找到了Apple的示例,并且我还发现该示例具有相同的内存泄漏。

您可以在以下 URL 中找到该示例。

https://developer.apple.com/library/content/samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196

根据UIImagePickerController文档:

https://developer.apple.com/documentation/uikit/uiimagepickercontroller

在第 5 点中,您说您必须使用委托对象来关闭图像选择器,在 Apple 的示例中UIImagePickerDelegate正在解雇。

问题在于,当您选择图像并使用它时,内存泄漏会浪费大约 21 MB 的内存。

使用的内存没有内存泄漏

enter image description here

内存泄漏的已用内存

enter image description here

内存泄漏

enter image description here

这是呈现的代码UIImagePickerController:

@IBAction func showImagePickerForPhotoPicker(_ sender: UIBarButtonItem) {
    showImagePicker(sourceType: UIImagePickerControllerSourceType.photoLibrary, button: sender)
}

fileprivate func showImagePicker(sourceType: UIImagePickerControllerSourceType, button: UIBarButtonItem) {
    // If the image contains multiple frames, stop animating.
    if (imageView?.isAnimating)! {
        imageView?.stopAnimating()
    }
    if capturedImages.count > 0 {
        capturedImages.removeAll()
    }

    imagePickerController.sourceType = sourceType
    imagePickerController.modalPresentationStyle =
        (sourceType == UIImagePickerControllerSourceType.camera) ?
            UIModalPresentationStyle.fullScreen : UIModalPresentationStyle.popover

    let presentationController = imagePickerController.popoverPresentationController
    presentationController?.barButtonItem = button   // Display popover from the UIBarButtonItem as an anchor.
    presentationController?.permittedArrowDirections = UIPopoverArrowDirection.any

    if sourceType == UIImagePickerControllerSourceType.camera {
        // The user wants to use the camera interface. Set up our custom overlay view for the camera.
        imagePickerController.showsCameraControls = false

        // Apply our overlay view containing the toolar to take pictures in various ways.
        overlayView?.frame = (imagePickerController.cameraOverlayView?.frame)!
        imagePickerController.cameraOverlayView = overlayView
    }

    present(imagePickerController, animated: true, completion: {
        // Done presenting.
    })
}

这是委托中用于驳回的代码UIImagePickerController:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let image = info[UIImagePickerControllerOriginalImage]
    capturedImages.append(image as! UIImage)

    if !cameraTimer.isValid {
        // Timer is done firing so Finish up until the user stops the timer from taking photos.
        finishAndUpdate()
    } else {
        dismiss(animated: true, completion: nil)
    }
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: {
        // Done cancel dismiss of image picker.
    })
}

fileprivate func finishAndUpdate() {
    dismiss(animated: true, completion: { [weak self] in
        guard let `self` = self else {
            return
        }

        if `self`.capturedImages.count > 0 {
            if self.capturedImages.count == 1 {
                // Camera took a single picture.
                `self`.imageView?.image = `self`.capturedImages[0]
            } else {
                // Camera took multiple pictures; use the list of images for animation.
                `self`.imageView?.animationImages = `self`.capturedImages
                `self`.imageView?.animationDuration = 5    // Show each captured photo for 5 seconds.
                `self`.imageView?.animationRepeatCount = 0   // Animate forever (show all photos).
                `self`.imageView?.startAnimating()
            }

            // To be ready to start again, clear the captured images array.
            `self`.capturedImages.removeAll()
        }
    })
}

我仍在寻找解决方案,任何帮助将不胜感激。


我遇到过同样的问题。很多其他人也是如此。追溯到 2008 年。相当疯狂。

  • http://iphonedevsdk.com/forum/iphone-sdk-development/3816-uiimagepickercontroller-memory-issues.html
  • UIImagePickerController 在启动后和拍照期间泄漏内存。拍摄超过 100 张照片后导致应用程序崩溃
  • UIImagePickerController 内存泄漏

不幸的是,我能找到的最好答案是使用单例,这很糟糕。 [IE。有意保留 UIImagePickerController 的实例,这样您每次想要选择图像时都只需访问该实例。] 这是其他人的建议。

此外,我只是花了一个小时用使用单例的代码编写这个答案,而且我无法避免内存泄漏[尽管我认为我有一秒钟]。也许我只是做得不正确 - 请随意尝试。但我不会发布我的功能失调的代码作为答案。

最好的答案[这就是我解决问题的方法]是使用第三方 Pod/库。我用过ImagePicker,它快、快、免费、漂亮,而且没有内存泄漏! [麻省理工学院许可证]

在这里查看:https://github.com/hyperoslo/ImagePicker

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

Swift 4 中的 UIImagePickerController 内存泄漏 Xcode 9 的相关文章

  • 在 iOS 上提升 Asio SSL 认证

    我正在尝试在 iOS 上使用 Boost Asio 并且已经解决了所有问题 但如何检查我正在连接的服务器的证书 如何使用 Boost Asio 在 iOS 中检查连接服务器的证书 在我的另一个答案中 您可以看到一个简单的 SSL 客户端 在
  • iOS应用程序启动黑屏,UINavigationController,Nib,RootViewController

    我有以下应用程序 其RootViewController被命名TopicsViewController 当我运行它时 没有任何错误或中断 但屏幕是black 没有桌子 无论是有人的还是空的 只有黑屏 不确定发生了以下哪一种情况 我的申请有问
  • 如何在 Swift 中的标签上制作阴影效果?

    我不知道如何在标签上编写阴影代码 我有一个会改变的乐谱标签 因此无法仅对带有阴影的文本进行Photoshop处理 我需要对其进行编码 以便它始终自动在文本后面有一个模糊的阴影 有人可以举一些例子或提供帮助吗 人们说这是重复的 重复 是关于
  • 在 SwiftUI 中,如何在 UIView 内部或作为 UIView 使用 UIHostingController?

    另一个问题标题可以是 如何将 UIHostingController 的视图添加为 UIView 的子视图 我正在创建一个新的 UI 组件 并且很乐意尝试 SwiftUI 下图是当前的视图结构 UIView 是我现在正在使用的 右上 Swi
  • 如何垂直对齐 UICollectionView 中的 UICollectionViewCells?

    我在水平滚动时有不同高度的单元格UICollectionView似乎垂直均匀地分布单元格 在单元格之间留下空白空间 我想将它们顶部对齐 并在每列的底部有可变的空白空间 我将提供的 UICollectionViewFlowLayout 扩展到
  • Xcode:仅在默认状态下设置按钮上的图像,也未选择

    一般来说 我是 Xcode 和 iPhone 编程的新手 我有一个简单的问题困扰着我 我想在按钮上设置图像 因为它是默认状态 所以我选择按钮 并在 显示属性检查器 选项卡中 选择 状态配置 作为默认值 然后在 图像 下拉列表中找到所需的图像
  • 自定义结构:类型不符合“可解码”协议

    我希望能够保存一个Custom struct to UserDefaults但为此我需要它Codable 我尝试过这样的 struct Wishlist Codable var name String var image UIImage v
  • NSAttributedString - 获取字体属性

    我需要获取有关我的属性字符串的信息 但不知道如何获取 我得到这本词典 2013 11 04 18 06 10 628 App 1895 60b NSColor UIDeviceWhiteColorSpace 0 3 1 NSFont
  • 收到 fcm 推送通知时设置应用程序徽章

    我正在使用 FCM 进行云消息传递 当我在后台和前台应用程序状态下收到来自服务器的推送通知时 我想添加应用程序徽章 我缺少什么 主要问题是根据推送通知添加 更新 删除应用程序徽章 我可以接收和处理推送消息 我在这个问题上花了 3 天 请帮帮
  • 自动调整大小在 xib 中不起作用

    我做了简单的设计 xib 我的应用程序的部署目标是iOS 5当我在模拟器或设备中运行我的应用程序时 我的视图不会调整大小 这是我的快照 xib file When i try to run my app in simulator it ru
  • 如何通过触摸按钮在 swift 2 中播放 m4a 文件?

    当我触摸按钮时 如何播放音频文件 我在网上找不到任何东西 因为它都是 swift 1 我想要音频代码original功能 import UIKit import AVFoundation class ViewController UIVie
  • 关闭模态视图控制器时如何保持呈现视图控制器的方向?

    我正在开发这个应用程序 我需要所有视图控制器 但只有一个是纵向的 单一视图控制器很特别 我需要它能够旋转到手机所在的任何方向 为此 我以模态方式呈现它 未嵌入导航控制器中 所以 例如 我的结构是这样的 window Portrait roo
  • PreferredStatusBarStyle 不起作用[重复]

    这个问题在这里已经有答案了 我以前用过setStatusBarStyle在我的项目中 它工作正常 但它已被弃用 所以我使用preferredStatusBarStyle 那不起作用 知道我已经 调用方法setNeedsStatusBarAp
  • 使用 Firebase/Analytics pod 时 SwiftUI 预览不起作用

    似乎在将 Xcode 12 更新到 beta 5 后 使用 Firebase Analytics pod 时 SwiftUI 预览不再工作 预览失败并出现错误 linker command failed with exit code 1 u
  • Spotify:使用网络 API 登录不接受重定向 URL

    我正在尝试使用 Web API 登录 Spotify 因为我不需要会话对象 在我的授权方法中 我需要传入重定向 url 但 GET 请求中不接受 iOS 重定向 url 的格式化方式 func authorize create the ur
  • 在 iOS 中将一个或多个格式化程序与页面渲染器一起使用

    有没有人尝试过使用多个格式化程序 UIViewPrintFormatter UIMarkupTextPrintFormatter UISimpleTextPrintFormatter 与页面渲染器 UIPrintPageRenderer 打
  • 如何在按回车键时以编程方式关闭 iOS 键盘

    我创建了一个UITextField以编程方式制作UITextFieldviewController 的属性 我需要通过回车和触摸屏幕来关闭键盘 我能够让屏幕触摸关闭 但按回车键不起作用 我已经了解了如何使用故事板以及通过分配和初始化来做到这
  • iOS 8.0 中的 UISearchBar barTintColor clearColor 错误

    在我的应用程序中我正在使用UISearchBar在 xib 与Xcode6 我给的条形锡颜色是透明颜色 它正在努力iOS 7 1 below 但主要问题在于iOS 8 0它的颜色不清晰 它显示黑色 看图片 任何对这个问题有冒险精神的人 我在
  • 为什么NWPathMonitor状态总是满足?

    当没有连接时 我从 URL 会话中收到一条错误消息 指出请求超时 我正在使用网络协议来事先检查连接情况 但显然当我在内部调用它时这不起作用viewDidLoad static func startUpdateProcess let moni
  • iPhone 和服务器上的 3DES 加密不同

    我有以下代码用于加密发送到服务器的请求 服务器上的解码由 NET 完成 在 iPhone 上 我使用带有以下代码的安全框架 NSString doCipher NSString plainText CCOperation encryptOr

随机推荐

  • 有没有办法使用 Spotify API 暂停?

    我希望能够暂停当前曲目 但似乎找不到任何方法 文档在这里 http developer spotify com download spotify apps api reference 我正在使用以下内容来播放曲目 m player play
  • NSStream、UTF8String 和 NSString...混乱的转换

    我正在构建一个数据包 通过 NSStream 发送到服务器 我试图用 ascii 代码 167 分隔两条数据 这就是服务器的构建方式 所以我需要尝试保持在这些范围内 unichar asciiChar 167 yields self set
  • “{ }”的 Visual Studio Code 格式

    我在Ubuntu上 Visual Studio Code 中的 C 自动 lints 就像 if condition true DoStuff 相反 我想做 if condition true DoStuff 我怎么做 我已经安装了C C
  • 在启用 cookie 的网站上使用 urlretrieve 的多线程网络抓取工具

    我正在尝试编写我的第一个 Python 脚本 经过大量谷歌搜索 我认为我已经完成了 然而 我需要一些帮助才能冲过终点线 我需要编写一个脚本来登录启用 cookie 的站点 抓取一堆链接 然后生成一些进程来下载文件 我的程序以单线程运行 所以
  • 同一项目的单独丰富代码片段范围

    我正在为我的网上商店创建丰富的片段 我使用的项目类型之一是 组织 类型 问题是我已经在网上商店的页眉中指定了组织名称和图像 并在页脚中指定了地址 介于两者之间的是网上商店的其余部分 其中包含所有产品 评论等 当我测试我的丰富网页摘要时htt
  • .NET MethodInfo 缓存可以清除或禁用吗?

    Per MSDN 呼叫Type GetMethods 将反映的方法信息存储在MemberInfo缓存 因此不必再次执行昂贵的操作 我有一个扫描程序集 类型的应用程序 寻找与给定规范匹配的方法 问题在于 由于 NET 依赖于方法元数据 因此内
  • sql server 中的顺序分组依据

    对于该表 ID Status Value 1 1 4 2 1 7 3 1 9 4 2 1 5 2 7 6 1 8 7 1 9 8 2 1 9 0 4 10 0 3 11 0 8 12 1
  • 在 Hadoop 中链接多个 MapReduce 作业

    在许多应用 MapReduce 的现实生活中 最终的算法最终都是几个 MapReduce 步骤 即Map1 Reduce1 Map2 Reduce2等等 因此 您可以将最后一次归约的输出作为下一个映射的输入 一旦管道成功完成 您 通常 就不
  • Firebase Child 必须是非空字符串且不包含

    我正在使用 Firebase 在 Swift 中编写一个基本的消息应用程序 我已经完成了应用程序的大部分内容 但在 ChatViewController 中我收到此错误消息 Terminating app due to uncaught e
  • XSLT:删除多余的空白字符,保留节点

    所以我的问题是这样的 我有一个在很多地方使用的转换文档 并且通常处理许多小型格式转换 在一种特定情况下 我需要从结果中删除空格 输出看起来像这样 n 某事非常重要 带有上标注释1 n 我尝试过以下变体
  • SSDT 部署后脚本

    我想在部署后忽略部署后脚本 在 SSDT 中将特定于分支的部署后脚本部署到生产环境后 如何存档 删除该脚本 有没有最佳实践 我以前所做的就是创建日志表并存储所有执行的脚本 这是表结构 CREATE TABLE dbo publish scr
  • 流媒体音频 (YouTube)

    我正在写一个CLI音乐媒体平台 其中一项功能是您可以直接从 CLI 播放 YouTube 视频 我真的不知道该怎么做 但这听起来是最合理的 我将使用那些可以从 YouTube 下载音乐的网站 例如 http keepvid com 然后我直
  • 按下 UIbutton 后如何更改 UIbutton 标题?

    按下 btn1 后 我无法更改 UIButton btn2 的标题 当我使用 definition settitle Show Word forState UIControlStateNormal它改变了原来的btn1 这是供您审核的代码
  • 当我使用 ISNUMERIC() 时,为什么转换失败?

    SELECT CAST Revenue Size M AS float FROM Raw Data A WHERE ISNUMERIC Revenue Size M 1 我收到错误 将数据类型 nvarchar 转换为 float 时出错
  • Delphi 2009 的通用链表

    我正在查看 Generics Collections 并注意到没有链接列表 当然 它们制作起来很简单 但我觉得很奇怪没有一个 或者我只是错过了 与新的现代数据结构相比 链表是否已经过时了 或者是否需要通用的链表 有人知道其中一个吗 你知道吗
  • 带有 Flutter 和 Firestore 的 GridView

    我正在尝试从云 Firestore 记录制作一个简单的 GridView 我遵循了很多视频教程 但没有成功 这是代码 import package flutter material dart import package cloud fir
  • Camera.main空引用异常

    我是 C 和 Unity 的新手 我已经阅读了整个论坛 但我仍然陷入困境 这是我收到的错误 NullReferenceException 未将对象引用设置为对象的实例 ClickToMove Update 位于 Assets Scripts
  • 具有隔离范围版本的指令冲突

    在我的 Angular 应用程序中 我有一个指令 可编辑 它是在 Angular 版本 1 2 0 rc 2 上编写的并且运行良好 但是当我将框架升级到版本 1 2 13 时 指令损坏了 我检查了其他版本的功能 但很困惑 因为指令仅适用于三
  • 调用一个不带参数的函数,尽管它需要一个 [K&R-C]

    它是 K R C 代码如下 http v6shell org history if c 看main 方法 有这一行 if exp 但函数 exp 被声明为 exp s 所以需要一个论证 为什么这有效 你为什么要这样做 归根结底 这是 Uni
  • Swift 4 中的 UIImagePickerController 内存泄漏 Xcode 9

    在我的应用程序中 当我使用UIImagePickerController 我以为是我的应用程序的问题 但是在搜索解决方案时我找到了Apple的示例 并且我还发现该示例具有相同的内存泄漏 您可以在以下 URL 中找到该示例 https dev