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

相关推荐
他们都不看好你,偏偏你最不争气7 分钟前
AutoLayout与Masonry:简化iOS布局
ios
2501_916008893 小时前
iOS 抓包工具有哪些?全面盘点主流工具与功能对比分析
android·ios·小程序·https·uni-app·iphone·webview
2501_915921433 小时前
iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护
android·ios·小程序·https·uni-app·iphone·webview
2501_916008897 小时前
uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915921438 小时前
iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
android·安全·ios·小程序·uni-app·iphone·webview
Digitally10 小时前
没 iCloud, 如何数据从iPhone转移到iPhone
ios·iphone·icloud
笑尘pyrotechnic10 小时前
push pop 和 present dismiss
macos·ui·ios·objective-c·cocoa
Digitally11 小时前
如何将联系人从 iPhone 转移到 Redmi 手机
ios·智能手机·iphone
2501_9151063212 小时前
Charles抓包工具在接口性能优化与压力测试中的实用方法
ios·性能优化·小程序·https·uni-app·压力测试·webview
Winson℡21 小时前
在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
react native·react.js·ios