【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 {
    // 优化应用,减少后台任务或禁用某些功能
    }

相关推荐
AaronMan12 小时前
iOS 中的 Subscription 与 RACDisposable:订阅生命周期管理
ios
代码的小搬运工14 小时前
【iOS】天气预报仿写总结
ios·objective-c·cocoa
代码的小搬运工15 小时前
【iOS】3G-Share仿写总结
macos·ios·cocoa
Lvan的前端笔记16 小时前
SwiftUI:iOS 常用视图组件速查
ios·swiftui·swift
2501_9160074716 小时前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
游戏开发爱好者817 小时前
iOS开发IDE有哪些 Xcode 和 快蝎 轻量替代方案
ide·vscode·ios·个人开发·xcode·swift·敏捷流程
ZZH_AI项目交付1 天前
同一套前摄心率算法,为什么 iPhone 16 Pro 稳,iPhone XR 会失准?
ios·app·ai编程
DeMinds2 天前
内容没有丢,我为什么总在重新整理?|DeMinds 如何让工作接着继续
ios·github·markdown
apd_csdn2 天前
清华邮箱苹果邮件app设置(全)
ios·thu