티스토리 뷰

반응형

 

 

앱 개발을 하다보면, 많은 트러플 슈팅을 경험하고, 이를 해결하게 되는데요. 크리티컬한 문제 중 하나가 앱 크래시 현상, 앱 강제종료 현상입니다. 🥹 앱 강제종료 현상은 여러가지 원인이 있지만, 메모리릭 문제가 쌓이면서 발생하는 경우도 꽤 많습니다.

불필요한 메모리가 쌓이고 쌓이면서 앱 성능을 저하시키고, 어느순간 비정상적인 앱 종료를 야기하기도 하므로, 이부분에도 많은 신경을 써주는게 좋은데요. 오늘은 메모리릭 (memory leak) 이슈를 유추하고 식별하고, 해결하는 간단한 방법 몇가지를 공유할게요~!

 

iOS memory leak, 메모리릭 확인하는 몇가지 간단 방법


init, deinit 등의 life cycle method에 로그 출력하기

클래스 객체 등은 reference counting을 하는데, 대부분의 경우는 ARC(automatic reference counting) 로 해결되지만, 여러가지 원인으로 강한순환참조가 발생하고, 불필요한 메모리가 쌓이는 메모리릭 (memory leak) 현상을 야기하곤 합니다.

이때 class 내의 init, deinit에 해당 객체 타입 명과 init, deinit 여부를 판단하는 로그를 출력하면, 개발하면서 해당 객체가 정상적으로 생성, 소멸되었는지를 확인 가능합니다.

매우 단순한 방법이지만, 이런 방법 만으로도 한번씩 메모리릭 문제를 예측하고 해결할 수 있는데요. 단일 객체 뿐만 아니라, 여러 객체가 상속받는 부모클래스의 life cycle method에 사용하면 더 유용하게 활용할 수 있습니다.

 

 

콘솔 로그에서 위와 같이 어떤 객체가 생성, 해제되는지 확인이 가능합니다~ 필터를 통해서 특정 객체의 메모리 생성, 해제 여부만을 판단할 수도 있습니다.

 

 


Debug Memory Graph navigator 확인하기

Xcode 하단 메뉴바 상단 띠를 보시면 UI 계층 캡쳐, 메모리 그래프 등의 옵션이 있는데요. 이중에 동그란 원 3개가 이어져있는 아이콘 모양을 선택하면, Debug Memory Graph를 보실 수 있어요.

이걸 누르면, 좌측 navigator에서 현재 실행 중인 앱의 메모리 리스트를 확인할 수 있습니다~!

 

 

좌축 navigator의 하단에 최근 개발했거나, 중요한 or 무거운 기능을 가진 기능 명, 객체 prefix 등을 필터 검색해보세요. 사용하지 않는 상태라면 검색되지 않아야하는 경우도 있고, 있더라도 딱 하나의 메모리만 잡혀야하는 경우도 있을텐데요.

이때 사용하지 않는 메모리가 잡히는지, 불필요하게 여러개의 메모리가 잡히는지를 확인하면 메모리릭 현상을 유추하고 해결하는 유용한 단서가 됩니다!

 

 

Debug Memory Graph를 열면 우상단에 위와 같이 leaked 경고도 확인해볼 수 있고, 경고를 선택하면 이와 관련된 메모리 리스트 항목도 확인가능하니, 추가적으로 참고할 수 있어요.

 

 


런타임에 Memory 상태를 통해 메모리릭 Memory leak 유추하기

다들 아시겠지만, 런타임 상태에서 상단의 "show the debug navigator" 메뉴를 탭하면 위와 같이 CPU, Memory 등의 상태를 실시간 확인이 가능하답니다. 만약 무거운 기능의 화면에 대해 메모리릭 현상이 발생하면 여기에 눈이 띄는 이상 현상이 감지 될 수 있어요. 그런 부분도 메모리릭을 유추해볼 수 있는 부분이라고 할 수 있습니다.

물론 작은 단위의 기능이 메모리릭 현상이 발생했다면, 이것으로 감지하기 어렵겠죠? 이것 외에도 다른 방법을 평소에 활용하는 습관, 메모리릭이 발생하지 않도록 조기에 신경써서 개발하는 습관이 필요하겠습니다.

 

 


오늘은 iOS 개발 간에 memory leak, 메모리릭 이슈 조기 발견하거나, 발견한 뒤 해결하는 방법을 알아봤습니다. 위의 방법으로 식별한 현상이 수정 후에 재현되지 않다면 해결이 된거겠죠? 🎊

이런 간단한 방법만으로도 최근 현업에서 많은 메모리릭 이슈를 발견하고 해결할 수 있어서 누군가에게도 도움이 될 수 있을거라 생각합니다!

리릭 현상을 조기에 해결하는 것이 앱 성능과 안정성에 중요한 부분이라고 생각해요. 하지만 인간이란게, 한번씩 이런부분을 놓치는 경우가 많습니다. 그렇기에 그 뒤에 메모리릭 현상을 식별하고, 조기 해결할 수 있도록 꾸준한 고민을 해나가면 좋을 것 같습니다!

많은 피드백과 댓글, 구독 부탁드립니다. 감사합니다~! 😊

 

메모리 누수(memory leak)의 위험성과 대표 발생 케이스, 해결방법 ▼

 

iOS 개발 간 메모리 누수의 위험성, 대표 발생 케이스 및 해결방법

안녕하세요~ 개발자 멍구입니다. ☺️개발 공부를 하다보면 항상 중요하게 다뤄지는 주제가 있지요. 바로 메모리 누수, 메모리릭(memory leak) 현상입니다. 서로를 강하게 붙잡고 있는 강한참조가

0urtrees.tistory.com

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함