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

包大小优化

  1. 图片

    1. LSUnusedResources 扫描重复的图片

    2. ImageOptim,压缩图片

  2. 压缩文件

    1. 优化音视频资源 ,使用MP3 代替 WAV

      ffmpeg -i input.mp3 -b:a 128k output.mp3

    2. 视频 H.265(HEVC) 代替 H.264 ffmpeg

      ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset fast -acodec aac -b:a 128k output.mp4

    3. 优化 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()
    }
    }
    }

  2. 大图片压缩

    func compressImage(_ image: UIImage) -> UIImage? {
    let imageData = image.jpegData(compressionQuality: 0.5)
    return UIImage(data: imageData!)
    }

  3. 避免主线程阻塞

    DispatchQueue.global(qos: .background).async {
    // 执行后台任务
    let result = fetchData()
    DispatchQueue.main.async {
    // 更新 UI
    self.updateUI(with: result)
    }
    }

  4. UI 渲染与布局优化

    1. 减少视图层次

    2. 避免过度绘制

    3. 使用异步渲染

      UIView.animate(withDuration: 0.3, animations: {
      self.view.alpha = 0.5
      })

  5. 网络请求优化

    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()
      }

  6. 应用启动优化

    1. 延迟加载非关键资源

      func applicationDidFinishLaunching(_ application: UIApplication) {
      loadEssentialResources()
      DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
      self.loadNonEssentialResources()
      }
      }

  7. 后台任务优化

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

    复制代码
    _manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
  9. 电池优化,低功耗模式适配

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

相关推荐
Privasa-隐私实验室7 小时前
跨端技术选型|Flutter搭建隐私加密App,安卓与iOS双端差异适配实战
android·笔记·安全·flutter·ios·隐私安全·aes-256
sakiko_21 小时前
OC基础语法(与Swift对比)-1
开发语言·ios·objective-c·swift
未来猫咪花21 小时前
Everything is ViewModel:让状态管理回到对象世界
android·flutter·ios
Crazy_MT1 天前
不越狱,iPhone 为什么也能安装任意 IPA?聊聊 iLoader、SideStore 和 LiveContainer 的原理
ios·开源
JoyCong19981 天前
从iPhone Ultra到ToDesk:折叠大屏时代的效率革命,硬件只是开始
大数据·运维·ios·智能手机·iphone·远程工作·远程操作
2501_916007471 天前
Flutter与游戏App加固避坑指南:如何为混合开发与高交互应用选对安全方案?
安全·flutter·游戏·ios·小程序·uni-app·iphone
2501_916008891 天前
Flutter 开发 iOS,项目打包成 IPA,命令与免 Xcode两种方法
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
SameX2 天前
iOS 独立开发者转鸿蒙:我把足迹地图 App 迁移到 ArkTS 的全过程
ios
sakiko_3 天前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift