包大小优化
-
图片
-
LSUnusedResources 扫描重复的图片
-
ImageOptim,压缩图片
-
-
压缩文件
- 优化音视频资源 ,使用MP3 代替 WAV
ffmpeg -i input.mp3 -b:a 128k output.mp3
- 视频 H.265(HEVC) 代替 H.264 ffmpeg
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset fast -acodec aac -b:a 128k output.mp4
- 优化 JSON / XML / Plist 压缩,去掉空格,减少 Key 长度
jq -c . input.json > output.jsonxmllint --format input.xml | tr -d '\n' > output.xmlplutil -convert binary1 input.plist -o output.plist
-
Enable Bitcode 能打开就打开
-
代码优化,infer代码走查并优化
-
Swift Package Manager 代替cocoapods
-
使用 WKWebView 代替 UIWebView,WKWebView 体积更小,性能更优
ios性能和稳定性优化
- 内存管理优化(使用 weak 和 unowned:特别是在闭包和委托中,确保避免循环引用。weak 引用会在对象被销毁时自动设为 nil,unowned 引用则不会。)
class MyClass {var closure: (() -> Void)?func setupClosure() {closure = { [weak self] inself?.doSomething()}}
}
- 大图片压缩
func compressImage(_ image: UIImage) -> UIImage? {let imageData = image.jpegData(compressionQuality: 0.5)return UIImage(data: imageData!)
}
- 避免主线程阻塞
DispatchQueue.global(qos: .background).async {// 执行后台任务let result = fetchData()DispatchQueue.main.async {// 更新 UIself.updateUI(with: result)}
}
-
UI 渲染与布局优化
- 减少视图层次
- 避免过度绘制
- 使用异步渲染
UIView.animate(withDuration: 0.3, animations: {self.view.alpha = 0.5 })
-
网络请求优化
- 使用缓存机制
- 压缩和优化网络数据 zip
- 懒加载和分页加载
func loadMoreData(page: Int) {let url = URL(string: "https://example.com/api/data?page=\(page)")!URLSession.shared.dataTask(with: url) { data, response, error inif let data = data {DispatchQueue.main.async {self.updateUI(with: data)}}}.resume() }
-
应用启动优化
- 延迟加载非关键资源
func applicationDidFinishLaunching(_ application: UIApplication) {loadEssentialResources()DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {self.loadNonEssentialResources()} }
-
后台任务优化
func beginBackgroundTask() {let taskID = UIApplication.shared.beginBackgroundTask {// 任务完成后的清理代码}// 执行后台任务 }
-
避免频繁更新定位信息,限制定位更新的频率和精度,避免过度消耗电池。
_manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
-
电池优化,低功耗模式适配
if ProcessInfo.processInfo.isLowPowerModeEnabled {// 优化应用,减少后台任务或禁用某些功能
}