앞으로 개발을 하게됨에 있어서 뷰 컨트롤러 생명주기를 사용할 일이 빈번해지게 된다. 간단하게라도 외워주면 좋을 것이다.
개발자라면 기능구현 뿐만이 아니라 메모리 누수 방지에 대한 지식도 필수적으로 알아야함.
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로 코드 부분으로 바로 접근할 수 있음