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

相关推荐
叽哥4 小时前
flutter学习第 11 节:状态管理进阶:Provider
android·flutter·ios
2501_916013746 小时前
移动端网页调试实战,跨设备兼容与触控交互问题排查全流程
android·ios·小程序·https·uni-app·iphone·webview
叽哥7 小时前
flutter学习第 10 节:表单与输入
android·flutter·ios
2501_9151063211 小时前
TF 上架全流程实战,从构建到 TestFlight 分发
android·ios·小程序·https·uni-app·iphone·webview
YungFan12 小时前
iOS26适配指南之UIVisualEffectView
ios·swift
Magic_ht13 小时前
UIApplicationDelegate执行说明
ios
Magic_ht13 小时前
NSThread
ios
归辞...1 天前
「iOS」————分类与扩展
ios·分类·cocoa
Digitally2 天前
如何将联系人从 iPhone 无缝传输到 iPad?
ios·iphone·ipad
00后程序员张2 天前
Charles中文版抓包工具功能解析,提升API调试与网络性能优化
android·ios·小程序·https·uni-app·iphone·webview