Xcode Instruments 성능분석툴 사용해보기

임혜정·2024년 7월 30일
0
post-thumbnail
post-custom-banner

앞으로 개발을 하게됨에 있어서 뷰 컨트롤러 생명주기를 사용할 일이 빈번해지게 된다. 간단하게라도 외워주면 좋을 것이다.

ViewController Lifecycle 정리

개발자라면 기능구현 뿐만이 아니라 메모리 누수 방지에 대한 지식도 필수적으로 알아야함.

Xcode Instruments 프로파일링

메모리누수를 캐치해낼 수 있는 도구

stack trace

Xcode Instruments를 익히기 전에 순환 참조하는 상황을 연출해본다.

import UIKit

class ClassA {
    var x: ClassB?
}

class ClassB {
    var x: ClassA?
}



class ViewController: UIViewController {

    
    @IBOutlet weak var uibutton: UIButton!
    
    @IBAction func uibuttonTapped(_ sender: Any) {
        
        let classA = ClassA()
        let classB = ClassB()
        
        // 순환참조 하는 상황 연출
        classA.x = classB
        classB.x = classA
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    

예제 코드에서는 버튼을 클릭하면 ClassA와 ClassB가 서로를 무한히 참조하게 되고 해제되지 않고 메모리 누수를 발생시킨다.

이제 cmd + i를 눌러 profile을 실행시키고 Leaks를 선택한다.

해당 창이 떴는데 만약 추적되고 있지 않다면 이미지처럼 빨간 버튼을 누르면 추적한다.

추적이 되고 있는 걸 확인할 수 있다.

아래 초록색 마름모는 메모리 누수가 발생하고 있지 않다는 뜻이다.

그러다 버튼을 클릭하게 되면 바로 빨간 마름모 아이콘으로 메모리누수 여부와 하단에 누수가 발생하는 객체를 알려준다.

Cycle & roots를 누르면 어떤 순서로 순환 참조하는지 흐름과 이미지도 보여준다.

Call tree > reveal in xcode로 코드 부분으로 바로 접근할 수 있음

profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글