10주차 iOS - 2021.10.24 ~ 2021.10.30

2022. 4. 26. 15:10오늘하루 개발 일지

 

FIX) Memory Leak with DiaryTextField


iOS 관련 자료를 뒤져보던 중 Memory Leak에 관한 내용이 나와 혹시 내가 만든 앱에는 Memory Leak이 생기진 않았을까라고 생각하며 Instruments 도구를 이용해 일기 앱의 메모리를 체크해보았다. 그런데 분명 뷰는 사라졌는데 로그인의 TextField가 해제되지 않고 남아있었다. 이를 해결하기 위해 직접 만든 커스텀 View인 DiaryTextField를 찾아보았고, bind 함수 부분에서 원인을 찾을 수 있었다.

위 사진과 같이 텍스트필드가 편집상 태일 때 하단의 separator의 색이 변하는 효과를 주는 기능을 구현한 코드에서 그냥 self를 사용하여 ARC를 사용하는 Swift에서 순환 참조가 발생하였던 것이다.

원래 이를 알고 있었으나, 이 부분 코드에서 까먹고 적용을 하지 않아 이러한 문제가 발생하였고, 빠르게 Fix해주었다.

 

Swift) 클로저(Closure) 정복하기(3/3) - 클로저와 ARC

안녕하세요 :) 소들입니다! 이번 포스팅은 클로저 정복하기 마지막 편!!! 메모리나 ARC에 대한 사전 지식이 없으면 조금 이해하기 어려울 수 있으니, 메모리 관련 포스팅을 먼저 보고 오심을 추천

babbab2.tistory.com

ADD) add Network


설계 당시에는 내부 DB와 서버통신을 같이 진행하려고 했으나, 출시 기한에 완성하지 못할 것 같았고 아직 실력이 부족하다고 생각했다. 그렇기에 조금 더 앱을 잘 사용할 수 있을 것 같은 서버통신을 사용하는 쪽으로 개발의 방향을 틀었다.

iOS에서는 서버와 통신하기 위해서는 기본적으로 URLSession이라는 걸 사용하고, 이를 조금 더 사용하기 쉽게 만들어주는 라이브러리가 Alamofire라는 라이브러리이다. 그러나 Alamofire를 사용할 경우 코드 재사용이 쉽지 않기에 Alamofire를 바탕으로 조금 더 재사용을 쉽게 만들어주는 라이브러리인 Moya를 사용하기로 결정하였다.

이를 사용할 경우 TargetType이라는 걸 바탕으로 여러 API들을 엔드포인트별로 깔끔하게 분리할 수 있으며,

Plugin이라는 걸 사용해 네트워크 통신을 조금 더 쉽게 만들어 줄 수 있다.

예시

  • 헤더에 토큰을 넣어주는 플러그인
  • 네트워크의 로그를 전부 출력해주는 플러그인

이번 주에는 BaseAPI를 정리하고, network통신을 담당해주는 class를 구현하고 Auth와 관련된 API들을 모아 정리해주었다. 확실히 이를 사용한다면 깔끔한 코드를 얻을 수 있을 것 같았고, 이를 공부한 다음 Service를 만들어 사용해야겠다.