[Instruments] Time Profiler 사용해서 앱이 멈추는 이유 찾기

 

분명........

성능을 생각하며 개발하는데도 어느 순간 보면 앱이 멈추는 hanging 현상이 일어날 때가 있다.

 

hanging 현상이 일어나지 않는 게 최고지만 마주하게 된다면 받아들이고 이별할 방법을 강구해야 한다.

 

 

 

 

환멸 격노 좌절 종말이 오기 전에 적당히 공포에서 탈출해야 한다.

Xcode는 대부분의 경우에 나를 화나게 하는 경우가 많지만 좋은 기능이 꽤 많다.

 

 

그 중 하나는 Instruments인데, hanging 현상 debuging에 유용한 건 Time profiler이다.

 

 

 

Time profiler 를 켜고 왼쪽 위 녹화 버튼을 누른 이후에 해당 현상을 재현해 보면 위와 같은 사진이 나온다.

Hangs에 나와 있는 빨간 부분이 앱이 멈춰 있던 부분이다. ^__^

 

 

아니면 xcode에서 빌드 시 profile로 실행하면 된다.

 

 

 

문제 해결을 위해서는 어떤 함수가 오래 main thread를 차지하고 있는지를 알아야 한다.

 

 

 

Time Profiler 하단에 보면 Call Tree라는 설정이 있는데,

 

그 중에서 나는 보통 위 세 개를 체크하고 본다

 

.

 

 

cpu usage 를 보면 범인식별가능 ♡

 

위 경우에는 DIContainer에서 hanging이 발생했다.

register를 모두 main thread에서 하고 있었으니 그럴만도 했다.

 

해당 부분을 background thread로 돌려 해결하니 hanging은 해결~~~~!!!!!!!

 

모든 문제가 이 사례처럼 바로 이유가 보였으면 좋겠다.