APP パフォーマンスの最適化とメモリの最適化
APP の機能が増加し、バージョンが繰り返されるため、メモリの最適化も急務となっています。(会社名、プロジェクト名は伏せさせていただきます)
APP の最適化に使用されるツール:
Xcode バージョン 13.4.1 (13F100)
計測器バージョン 13.4.1 (13F100)
シミュレータ iPhone 13 Pro Max(iOS 15.5)
静的解析(Analyze)
前に最適化する
-
静的解析によりメモリリークの疑いのある箇所が分かるため、業務に応じた解析が必要です。
-
Xcode調査に基づいてリークの疑いのある箇所を見つけて分析します
-
項目ごとに分析・修正
CaptureViewController
インスタンスメソッドの[super ViewDidDiscovery:]
呼び出しがありませんPhotoViewController
ブロックには 10 個の強参照がありますMemory error
無修正: 基本的にすべてが戻り値の型であり、戻り値が存在する場合がNSString
あります。nil
Localizability Issue
未変更: ユーザー向けテキストはローカライズされた文字列マクロを使用しませんCFStringRef
参照カウントが 1 増加するため、呼び出す必要がありますCFRelease()
Core Foundation
変換にはObjective-C
所有権の移転が存在します
後で最適化する
検査により検出された漏れの疑いのある箇所はすべて静态分析(Analyze)
修復されています。
デバッグメモリグラフ
前に最適化する
-
29種類のリーク タイプ
Debug Memory Graph
があることがわかります。
-
表示するものをクリックする
Memory Graph
と、メモリ内の参照関係が表示されます。
-
テーブルごとに分析および変更する
ClickHightlightDelegate
弱い参照に変更するUITextFieldDelegate
弱い参照に変更するUITextViewDelegate
弱い参照に変更する- 削除し
ImagePickerViewDelegate
てインスタンスメソッドに変更 GMImagePickerControllerDelegate
弱い参照に変更するAFHTTPSessionManager
タイムリーなリリースsession
後で最適化する
malloc block leaked
残りの 5 つのリーク タイプは、ツールがリーク ポイントを指摘しなかったカテゴリに属しており、当社によるさらなる分析が必要です。
動的解析
前に最適化する
-
ツール分析により
leaks
、1 か所に 384 個の新しいリーク ポイントがあることがわかりました。
-
いくつかのモジュールをクリックしたところ、合計 779 個のリークが見つかりました。
-
リークされたコードに従って修正
pageController
弱い参照に変更するWebNativeViewController
ブロックコールバックの参照関係を変更するWebNativeDataSource
ブロックコールバックの参照関係を変更するFeedbackDelegate
弱い参照に変更するWebImageUtils
弱い参照に変更するWebNativePagingCell
__weak 弱参照に変更しますWebPluginShare
__weak 弱参照に変更しますJSContext
参照関係とメモリ解放を最適化する
後で最適化する
- ほとんどの水漏れを修理しました
- 現在のレガシー JavaScriptCore フレームワークを最適化する必要がある
最適化の結果
最適化前
-
Viewcontroller
破壊も誘発もできないdealloc
-
APP起動、初期メモリ
-
指定されたパスをたどって繰り返しクリックすると、メモリが増加し続けます
最適化後
-
Viewcontroller
破壊して発動可能dealloc
-
APP起動、初期メモリ
-
指定されたパスに従ってクリックを繰り返すと、メモリは安定し、急激に増加することはありません。