You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Apple官方相机Sample App开发,拍摄3张照后崩溃求助

问题分析与解决方案

基于你提供的代码和场景(iOS17 + Xcode15,拍摄3张照片后崩溃),以下是可能的崩溃原因及对应修复方案:

1. 相机资源未正确释放导致内存泄漏

你基于的Apple相机示例中,Camera类(代码未贴出但通过model.camera调用)可能在多次拍照后未清理AVCapturePhoto等临时资源,导致内存占用持续飙升触发崩溃。

修复:
在Camera类的takePhoto()回调逻辑中,处理完照片数据后立即释放临时持有的AVCapturePhoto对象,避免强引用长期占用资源。

2. SwiftUI Image转UIImage的内存开销问题

你使用的asUIImage()扩展通过渲染UIView获取图片,多次调用会累积大量图形资源;同时直接将高分辨率照片的pngData()存入数组,会快速耗尽内存。

修复:

  • 跳过SwiftUI Image中间转换,直接从相机捕获的原始AVCapturePhoto提取数据:在DataModel的拍照回调中,用photo.fileDataRepresentation()获取原始数据存储,无需转成SwiftUI Image再转回UIImage。
  • 对图片数据进行压缩(如果不需要原始分辨率):
    // 假设DataModel中存储了捕获的原始UIImage
    if let originalImage = model.capturedOriginalImage {
        let compressedData = originalImage.jpegData(compressionQuality: 0.7) ?? Data()
        userViewModel.NotePhotoDatas.append(compressedData)
    }
    

3. 动画触发逻辑不合理导致不必要重绘

代码中thumbnailImage的动画绑定值为固定的1.0,会导致每次视图更新都触发动画,引发不必要的视图重绘和内存消耗。

修复:
将动画的触发值改为model.thumbnailImage,仅当图片实际变化时才执行动画:

model.thumbnailImage?
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(width: 60, height: 60)
    .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous))
    .animation(.spring(), value: model.thumbnailImage)

4. 相机会话生命周期未妥善管理

当前代码仅在视图出现时启动相机,但未在视图消失时停止会话,多次进入退出相机视图可能导致多个相机会话同时占用系统资源。

修复:
添加视图消失时的相机停止逻辑:

// 在sCameraView的body中添加
.onDisappear {
    Task {
        await model.camera.stop()
    }
}

5. 内存数组累积过大

userViewModel.NotePhotoDatas作为内存数组,不断添加大图数据会导致内存持续增长。若无需长期保存在内存,应持久化到磁盘而非直接存数组。

修复:
保存照片时写入本地文件,仅存储文件路径:

if let data = image?.pngData() {
    let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        .appendingPathComponent("photo_\(Date().timeIntervalSince1970).png")
    try? data.write(to: fileURL)
    userViewModel.NotePhotoPaths.append(fileURL.path) // 存储路径而非完整数据
}

调试建议

  • 使用Xcode的Memory Graph Debugger查看内存泄漏点,确认是否有未释放的AVCapture对象或图片数据。
  • 查看崩溃日志的具体报错信息(如EXC_BAD_ACCESS或内存警告),精准定位崩溃根源。

内容的提问来源于stack exchange,提问作者Tracy9988 Xu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:25:23