[Xcode] Instruments (2) - 활용예시
이전 포스팅에서 instruments의 구성요소들과 개념들을 알아보았습니다.
이번에는 instruments를 활용하여 메모리 누수를 잡아보겠습니다.
예시 코드
예시는 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 중에서 Allocations를 선택하고
Detail pane에서 가장 하단의 filter 부분에서 instrument를 넣으면
아래와 같은 Detail pane을 볼 수 있습니다.
여기서 주목할만한 부분은 # 과 # Transient부분입니다.
#은 현재 메모리에 할당된 각 객체의 수가 계산되어 나타나고
#Transient는 할당해제된 객체 수가 표시됩니다.
위의 코드를 돌려보면 아래와 같이 강한참조가 일어나는 것을 알 수 있습니다.
그래서 이 강한참조사이클을 방지하고자 weak 키워드를 사용하여
참조 class를 고치면 할당해제됨을 알 수 있습니다.
// 참조 class
class Service {
weak var redController: RedController?
}
간단한 예제를 통해 instruments를 이용하여 reference cycle을 시각적으로 살펴보고 메모리를 관리 할 수 있었습니다.
Author And Source
이 문제에 관하여([Xcode] Instruments (2) - 활용예시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mytrace/Xcode-Instruments-2-활용예시저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)