Memory Leak이란?
'메모리 누수'라고도 표현하며, 더이상 사용되지 않는 인스턴스가 메모리에서 해제되지 않고 남아있는 현상을 뜻한다.
이 메모리 누수를 해결하지 않으면 한정된 리소스를 효과적으로 활용하기 어려우니 메모리 누수가 일어나고 있지는 않은지 확인해서 반드시 해결해야 한다.
이번 글에서는 Memory Leak을 확인하는 두가지 방법을 소개하고자 한다.
바로 Xcode의 'Memory Graph Debugger'와 'Instruments'다.
그중에서도 이번에는 Instruments에 대해 알아보자.
사전 준비
이전 글에서 사용한 예제를 그대로 사용했다.
이전 글과 마찬가지로 첫번째 화면(First)에서 터치하면 두번째 화면(Second)로 진입하고, 진입하면서 동시에 서로를 강하게 참조하는 인스턴스 두 개를 생성한다.
// 코드는 이전 글과 동일하므로 생략. 코드가 궁금한 사람은 이전글로!
방법2: Instruments
이 방법은 우리가 흔히 하는 대로 프로그램을 실행하는 'Run'이 아니라 'Profile'로 실행해야 한다.
Profile로 선택 후 앱을 실행하면 아래와 같은 창이 뜬다. 이때, Memory Leak을 확인하고 싶다면 Leaks를 선택한다.
Leaks을 선택하면 아래와 같은 창이 뜬다.
이때, 녹화를 시작해야 비로소 앱이 실행되면서 실시간으로 메모리를 확인할 수 있다!
녹화를 시작하면 자동으로 앱이 실행된다. 구현한 앱의 기능을 사용하면 앱에서 메모리를 어떻게 사용하는지, 어떤 객체들이 메모리에 적재되는지 확인할 수 있다.
위 코드에서 우리는 Second View에 진입하면 객체 sampleA와 sampleB가 서로를 강하게 참조해서 Memory Leak이 발생하도록 코드를 짰다. 실제로 instruments의 하단 탭에 Leaked Object에 해당 객체가 기록되는 걸 확인할 수 있다.
만약 여기서 First View와 Second View를 반복적으로 오가며 SampleA, SampleB 객체 생성을 반복한다면 위 이미지에서 Count에 적힌 숫자의 크기도 횟수만큼 함께 늘어난다.
Memory Graph Debugger는 해당 화면의 snapshot을 찍어 참조 관계를 확인하는 반면, instruments는 앱을 사용하며 실시간으로 Memory Leak을 확인할 수 있다는 장점이 있다.
'iOS' 카테고리의 다른 글
[iOS] Xcode에서 Memory Leak을 확인하는 두 가지 방법 - 1) Memory Graph Debugger (0) | 2022.02.10 |
---|---|
[iOS] 앱을 첫 출시 했는데, 언어가 영어(EN)라고? 대체 왜?? (0) | 2022.01.03 |
[iOS] 텍스트 필트(UITextField) 커서 숨기기 (0) | 2021.12.25 |
[iOS] Scroll View의 오토 레이아웃이 동작하지 않을 때 in storyboard (0) | 2021.08.12 |