当前位置: 首页 > news >正文

【iOS】包大小和性能稳定性优化

包大小优化

  1. 图片

    1. LSUnusedResources 扫描重复的图片
      在这里插入图片描述

    2. ImageOptim,压缩图片
      在这里插入图片描述

  2. 压缩文件

    1. 优化音视频资源 ,使用MP3 代替 WAV
    ffmpeg -i input.mp3 -b:a 128k output.mp3 
    
    1. 视频 H.265(HEVC) 代替 H.264 ffmpeg
    ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset fast -acodec aac -b:a 128k output.mp4
    
    1. 优化 JSON / XML / Plist 压缩,去掉空格,减少 Key 长度
    jq -c . input.json > output.json
    
    xmllint --format input.xml | tr -d '\n' > output.xml
    
    plutil -convert binary1 input.plist -o output.plist
    

    在这里插入图片描述

  3. Enable Bitcode 能打开就打开

  4. 代码优化,infer代码走查并优化

  5. Swift Package Manager 代替cocoapods

  6. 使用 WKWebView 代替 UIWebView,WKWebView 体积更小,性能更优

ios性能和稳定性优化

  1. 内存管理优化(使用 weak 和 unowned:特别是在闭包和委托中,确保避免循环引用。weak 引用会在对象被销毁时自动设为 nil,unowned 引用则不会。)
class MyClass {
    var closure: (() -> Void)?
    func setupClosure() {
        closure = { [weak self] in
            self?.doSomething()
        }
    }
}

  1. 大图片压缩
func compressImage(_ image: UIImage) -> UIImage? {
    let imageData = image.jpegData(compressionQuality: 0.5)
    return UIImage(data: imageData!)
}
  1. 避免主线程阻塞
DispatchQueue.global(qos: .background).async {
    // 执行后台任务
    let result = fetchData()
    DispatchQueue.main.async {
        // 更新 UI
        self.updateUI(with: result)
    }
}

  1. UI 渲染与布局优化

    1. 减少视图层次
    2. 避免过度绘制
    3. 使用异步渲染
    UIView.animate(withDuration: 0.3, animations: {
       self.view.alpha = 0.5
    })
    
  2. 网络请求优化

    1. 使用缓存机制
    2. 压缩和优化网络数据 zip
    3. 懒加载和分页加载
    func loadMoreData(page: Int) {
       let url = URL(string: "https://example.com/api/data?page=\(page)")!
       URLSession.shared.dataTask(with: url) { data, response, error in
          if let data = data {
                DispatchQueue.main.async {
                   self.updateUI(with: data)
                }
          }
       }.resume()
    }
    
  3. 应用启动优化

    1. 延迟加载非关键资源
    func applicationDidFinishLaunching(_ application: UIApplication) {
       loadEssentialResources()
       DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
          self.loadNonEssentialResources()
       }
    }
    
  4. 后台任务优化

    func beginBackgroundTask() {
       let taskID = UIApplication.shared.beginBackgroundTask {
          // 任务完成后的清理代码
       }
       // 执行后台任务
    }
    
  5. 避免频繁更新定位信息,限制定位更新的频率和精度,避免过度消耗电池。

    _manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
    
  6. 电池优化,低功耗模式适配

if ProcessInfo.processInfo.isLowPowerModeEnabled {
    // 优化应用,减少后台任务或禁用某些功能
}

相关文章:

  • B. Make It Increasing
  • 【phpstudy】关于实现两个不同版本的mysql并存。
  • SpringBoot速成(12)文章分类P15-P19
  • JAVA集合
  • python 视频处理库moviepy 设置字幕
  • 【LeetCode Hot100 矩阵】矩阵置零、螺旋矩阵、旋转图像、搜索二维矩阵II
  • 开源协议深度解析:理解MIT、GPL、Apache等常见许可证
  • JavaScript 简介
  • 枚举类型Enum
  • DeepSeek-R1 + Cherry Studio 本地部署打造个人 AI 知识库
  • C语言01
  • Kimi k1.5:继Deepseek R1 后多模态 AI 的新标杆
  • 低成本、高效率且成熟的电商实时数据采集方案:梦想成真?
  • 放大镜效果
  • 图论算法篇:邻接矩阵以及邻接表和链式前向星建图
  • winfrom实现人脸识别比对功能
  • 大模型开发实战篇5:多模态--文生图模型API
  • 如何设置Python爬虫的User-Agent?
  • torch-xla动态shape——通过torch.nonzero分析mhlo实现
  • 第六天:requests库的用法
  • 习近平向“和平薪火 时代新章——纪念中国人民抗日战争和苏联伟大卫国战争胜利80周年中俄人文交流活动”致贺信
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 央行宣布优化两项支持资本市场的货币政策工具
  • 罗马尼亚临时总统博洛让任命普雷多尤为看守政府总理
  • 想要“逆转”糖尿病,减少这两处脂肪是关键
  • 中小企业数字化转型的破局之道何在?