包大小优化
-
图片
-
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.json
xmllint --format input.xml | tr -d '\n' > output.xml
plutil -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] in
self?.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 {
// 更新 UI
self.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 in
if 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 {
// 优化应用,减少后台任务或禁用某些功能
}