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

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

http://www.kler.cn/a/548863.html

相关文章:

  • 如何测试和验证CVE-2024-1430:Netgear R7000 路由器信息泄露漏洞分析
  • 详细介绍:封装简易的 Axios 函数获取省份列表
  • 【云安全】云原生-K8S(四)安全问题分析
  • 【前端】自己从头实现一个gpt聊天页面
  • 用命令模式设计一个JSBridge用于JavaScript与Android交互通信
  • Visionpro 齿轮测量
  • DeepSeek-R1使用生存指南
  • Windows逆向工程入门之汇编位运算
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_t 类型
  • DeepSeek辅助测试测试一 -- DeepSeek加MaxKB知识库本地部署
  • 如何通过AI轻松制作PPT?让PPT一键生成变得简单又高效
  • 一键终结环境配置难题:ServBay 1.9 革新 AI 模型本地部署体验
  • HTML5 起步
  • 「AI学习笔记」机器学习与深度学习的区别:从技术到产品的深度解析(四)...
  • IoTDB 节点宕机后集群恢复
  • 轻量级分组加密算法RECTANGLE
  • AWS SES 投诉率问题全面解析及解决方案
  • 2024各地低空经济政策汇编资料
  • Deepseek高效使用指南
  • DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!