[Swift]メモリリーク確認用デバッグのTips
2812 ワード
メモリリーク確認方法
- 赤丸の「Show the Debug navigator」 で確認する
- ビルド後に「Debug Memory Graph」をタップ
- 例として下図のようにVCなどの中のコンポーネントで何が残っているか確認出来る
- もしリークを確認し、該当箇所を調査したい場合は、
Edit Sceme -> Run -> Diagnostics -> Malloc Stack Loggingにチェック
メモリーリークの解消方法
上記のやり方で該当のコンポーネントや、リークしているソースの場所は分かるが、
そこからの修正は様々なパターンがあり、対処も変わってくる。
ここではよくあるリークの原因である循環参照
についてその対策を挙げていく。
Delegate
delegateを定義する際は、循環参照を避けるためにweak
をつけて宣言する必要がある。
class SampleViewController: UIViewController {
weak var delegate: SampleViewControllerDelegate?
}
クロージャ
クラス内でプロパティとしてクロージャを保持する場合、
必ずselfの参照を弱参照にする必要がある。(weak self
)
// プロパティ用意
var closure: (String) -> Int
// selfを弱参照にする
let sampleClosure = {[weak self] string in
return string.count
}
// クロージャをプロパティで保持
closure = sampleClosure
Author And Source
この問題について([Swift]メモリリーク確認用デバッグのTips), 我々は、より多くの情報をここで見つけました https://zenn.dev/chiii/articles/0c87741ccc0f53著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol