제목: iOS — Identifying Memory Leaks using the Xcode Memory Graph Debugger
이 짧은 포스팅에서 내가 설명할 것은 아래와 같다
- Xcode의 메모리 그래프 디버거란
- 이것을 어떻게 사용하고, 몇가지 팁들
- 장/단점들
이것이 무엇인가
짧게말해 메모리 그래프 디버거는 다음 질문의 답변에 도움을 준다. 한 오브젝트가 왜 메모리에 남아있는가?
Xcode의 메모리 그래프 디버거는 레티인 사이클과 메모리 누수를 찾아내고 고치는데 도움을 준다. 그 일이 발생하면, 앱 실행이 일시정지되고 현재 힙에서 오브젝트를 보여주는데, 이 오브젝트가 살아있게 하는 참조들이 무엇인지 그 관계와 함께 나타난다.
어떻게 사용하는가
리테인 사이클과 메모리 누수를 식별하는데 3가지 간략한 단계가 있다.
- 1. 아래처럼 Xcode scheme editor로 stack logging에 체크한다.
live allocations을 위해 Malloc stack logging을 켜기
'Live Allocation'의 logging만 켰다. 이것은 디버깅할때 'All Allocations'를 선택하는것보다 오버헤드가 적고, 레테인 사이클과 누수를 식별하는데 필요한 것이다.
- 2. 분석하고 싶은 앱을 실행시키고(리테인 사이클이나 누수가 의심되는 행동), 그 디버그 바 버튼을 선택하여 메모리 그래프 디버깅 모드로 들어가자.
메모리 그래프 디버깅 버튼
- 3 .메모리 그래프 디버거는 앱 실행을 일시정지하고 아래를 보여준다.
Xcode의 메모리 그래프 디버거 모드
왼편에 디버그 네비게이터가 앱의 힙 내용을 보여준다.
디버그 네비게이터에 type/instance를 선택하면 가운데 패널에서 인스턴스 참조들을 보여준다.
가운데 참조 패널에 인스턴스를 선택하면 오른편의 인스팩터 페널에서 일반적인 오브젝트 메모리 정보와 allocation backtrace를 보여준다.
누수는 아래처럼 디버그 네비게이터에서 볼 수 있다.
디버그 네비게이터에 나타난 누수
팁
- 1. 메모리 누수를 식별하는데 도움이 되기위해서, 아래처럼 누수만 보이도록 힙 내용을 필터링할 수 있다.
메모리 누수를위한 필터링
- 2. 런타임 이슈 네비게이터도 유용한데, 식별된 모든 누수의 숫자를 표시한다.
수많은 메모리 누수들!
좋은점과 나쁜점
- 좋은점: 운좋게 누수를 쉽게 찾아낼 수 있다(간단한 리테인 사이클). 예를들어 한 오브젝트가 클로저 프로퍼티 안에서 자신을 붙잡고 있을때. 이건 붙잡고 있는 참조를 weak로하여 쉽게 고쳐진다.
- 나쁜점: 잘못 알려주는 경우. 예를들어 UIButton 오브젝트를 만들고 UIToolBars 아이템 배열에 추가했는데, 메모리 누수로 나왔지만 그 이유는 볼 수가 없었다.
유용한 링크들
- https://developer.apple.com/videos/play/wwdc2016/410/
- https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/TP40015022-CH9-DontLinkElementID_1
- https://useyourloaf.com/blog/xcode-visual-memory-debugger/
이게다다! 📱🚀👍🏽
이 블로그는 공부하고 공유하는 목적으로 운영되고 있습니다. 번역글에대한 피드백은 언제나 환영이며, 좋은글 추천도 함께 받고 있습니다. 피드백은
- 블로그 댓글
- 페이스북 페이지(@나는한다번역)
- 이메일(canapio.developer@gmail.com)
- 트위터(@canapio)
으로 보내주시면 됩니다.
'Swift와 iOS > 기술' 카테고리의 다른 글
[번역]iOS11: 모두를 위한 기계학습 (2) | 2017.08.15 |
---|---|
[번역]인스트루먼트없이 누수 뷰컨트롤러 잡아내기 (363) | 2017.08.15 |
[번역]Vapor, 그리고 그 콜백과 스택 넘기기 (0) | 2017.08.05 |
[번역]속성으로 스위프트 코드베이스를 최적화하기 (0) | 2017.06.18 |
[번역]주석에대하여 (0) | 2017.06.17 |
WRITTEN BY
- tucan.dev
개인 iOS 개발, tucan9389
,