[Xcode]Instruments(2)-使用例

6284 ワード

以前の位置決めでは,計器のコンポーネントと概念を理解した.
今回は機器を利用してメモリ漏れを制御してみましょう.

サンプルコード


例は、https://www.youtube.com/watch?v=sp8qEMY9X6Qビデオのコードを参照している.

完全なコード

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // rightBarButton 추가
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Show Red", style: .plain, target: self, action: #selector(handleShowRedController))
    }
	// button 기능
    @objc func handleShowRedController() {
        navigationController?.pushViewController(RedController(), animated: true)
    }
}
// 참조 class
class Service {
    var redController: RedController?
    
}
// navigation push ViewController
class RedController: UITableViewController {
    // 소멸시 출력될 키워드
    deinit {
        print("OS reclaming controller")
    }
    
    let service = Service()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = .red
        
        service.redController = self
    } 
}

「instruments profiles」から「Alllocation」を選択します.
Detailパネルの一番下のフィルタ部分からツールを挿入します.
次のようにDetail paneを表示できます.

ここで注意すべき部分は#と#のトレーニング部分です.
#現在のメモリに割り当てられている各オブジェクトの数を計算します.
#Transionは、割り当て解除されたオブジェクトの数を表示します.
上のコードを振り返ると、下は川です.

だからこの川が混乱状態に陥るのを防ぐために、
参照クラスを修復すると、割り当て解除を求めるメッセージが表示されます.
// 참조 class
class Service {
    weak var redController: RedController?
    
}

簡単な例では、ツールを使用して参照ループを直感的に表示し、メモリを管理できます.