본문 바로가기

IT/iOS

Xcode - Profile의 leaks을 파헤쳐보자

어떤 프로젝트를 만들고나서 또는 만드는 중에 메모리 릭이나 현재 이앱의 무게? 를 측정하기 위해 사용하는 툴이 있다. 

바로 요녀석 

 

아이콘 모양도 엑스레이 촬영하는것처럼 생긴 녀석이다

바로 내가 만든 프로잭트를 종합검진하는 녀석이라고 생각 하면되겠다.

 

안에 들어가보면 여러가지 항목이 있는데 

메모리나 CPU File System등의 항목을 검사할 수 있지만 이번 포스팅은 가장 자주 사용하는 Leaks에 대해서 이야기 하겠다.

Leaks는 메모리검사라고 생각 하면되는데 내가 만든 앱을 실행했을때 사용되는 메모리 새는 메모리 총사용메모리등 메모리전반적인 자세한 내용을 보여준다.

 

사용방법은 다음과 같다.

시뮬레이터기준으로 진행하였다.

 

먼저 엑스코드에에서 Run버튼이 있는 위치를 오래 클릭하면 다음과 같은 메뉴가 나온다.

 

여기서 3번째 매뉴인 Build for Profiling 을클릭하면 된다
또는 상단메뉴 Product에서 Profiling을 눌러도되고 

(command)+i 를해도된다

 

그럼 위의 두번째 이미지와 같은 화면이 뜨게 된다.

그중에서 Leaks를 더블클릭하면 

요런 화면과 함께 시뮬레이터도 같이 켜지게된다.

위쪽 instruments에서  allocations과 Leaks가 있는데 보통은 Leaks를 많이 사용한다 하지만 필자는 allocations도 가금 쓰는 편이다.

allocations은 내가 만든 앱이 사용하고 있는 메모리와 쓴메모리 해제한 메모리등을 확인 할 수 있는 곳이다.

 

allocations에서 각각의 필드들이 있는데 각각항목명의 의미는 다음과 같다.

Live Bytes : 사용하고 있는 앱의 현재 사용중인  alloc된 object들의 크기

#Living : 사용하고 있는 앱의 현재 사용중인  alloc된 object들

#Transitory : 앱에서 release된  object들

Overall Bytes : 지금까지 alloc된 모든 object들의 크기

# Overall : 지금까지 alloc된 모든 object들

#Allocations (Net / Overall) : (현재 메모리에 alloc된 object/지금까지 alloc된 모든 object)

 

이걸토대로 내가 만든앱의 메모리 사용량등을 직접 시뮬레이터로 만지면서 확인할 수 있다.

 

다음은 Leaks다. 

Leaks은 내가 만든 앱에서 메모리가 세는 부분 (쉽게 말해 일정한 코스가있는 레일레 물을 흘려보내고있는데 코스 중간에 구멍이나서 코스밖으로 물이 새는경우다 여기서 물은 메모리, 코스는 앱) 이 있는지 확인하는 탭이다.

Leaks화면은 다음과 같다. (임의로 Leaks을 만들어 보았습니다.)

얼핏 보면 머가 먼지 모르겠지만 필자는 이렇게 옵션을 두고 사용한다.

먼저 시스템 라이브러리에서 메모리가 세는 경우를 보지 않기 위해 가운데 창문모양과 Leaks 같이 있는 템을 눌러 Call tree로바꿔준다

 

 

 

그리고 왼쪽 하단텝에서  Call Tree메뉴가 활성화 되는데 Hide System Libraries를 클릭한다. 그렇게 되면 시스템적으로 Leaks이 발생할때는 보여지지 않게 된다.

 

또 릭이 발생할경우 빠르게 그레프에 표시되기 위해 

왼쪽 중간텝에 있는  Snapshots메뉴에서 Snapshot interval (sec) 를 1로 조정한다.

그러면 다음과 같이 표가 바뀌어있을 것이다.

이제 차근차근 릭이날부분을 찾아 보면 내가 작성한 소스부분에서  Leaks이발생한 부분을 찾을 수 있을 것이다.