본문 바로가기

iOS

(63)
[iOS] 뷰 컨트롤러 강한 참조 발생 경험와 해결 방법. Strong reference closure | ARC 진짜 뿌수기 #1 안녕하세요: ] 이번 포스트는 ARC와 RC(retain count), strong reference cycle에 대한 간단한 개념을 정리할 것입니다. 포스트의 후반부에는 제가 실제로 개발하며 때 런타임 때 viewController, coordinator와 navigation controller, closuer의 관계에서 발생된 strong referency cycle! 이슈관련해서 메모리가 증가됬던 경험과 해결 방법을 소개하려고 합니다 +_+ ARC와 RC란?! ARC와 RC를 탐구하기 전에 간단히 값 타입(Value type)과 참조 타입(Reference type)을 비교해보려고 합니다. Value type vs Reference type Swift는 크게 값(value)타입과 참조(refere..
[iOS] xcode pbxproj 충돌. pbxproj merge confilt를 자동으로 할 경우 문제와 해결 방법 파해치기!!! | # 자동 병합?! 안녕하세요. 이번 포스트에선 xcode 프로젝트에서 실행버튼이 막혔을 때, 그리고 pbxproj 자동 병합의 장 단점에 대해 소개하려고 합니다. xcode 실행 버튼이 안열리는 이유 위 사진은 협업하다보면 자주 일어날 수 있습니다. 아니면 서로 다른 브랜치에서 혼자 만들었던 파일을 막 수정하거나 삭제한 후에 서로 다른 브랜치를 합칠 경우에도 발생될 수 있습니다. 이 경우는 pbxproj 파일 내부 코드에서 깃 충돌이 났을 때, 병합 충돌을 표시해주기 위해 추가적으로 삽입되는 코드들 때문에 실행이 안되는 것입니다. 이 충돌을 해결하기 위해선 위와 같은 경로로 들어가서 project.pbxproj 파일의 코드를 수정하면 됩니다. ( 깃허브에서 제시한 충돌 내용을 제거하면 됩니다. ) 이렇게 충돌이 난 이유 ..
[iOS] 컬랙션 뷰 Flow -> Compositional layout으로 리펙터링하기 #1 안녕하세요. 이번 포스트에서 컬랙션 뷰 flow layout으로 구현했던 기존 여행 앱 피드 화면을 compositional layout으로 리빌딩한 경험을 공유하려고 합니다: ] 리빌딩을 하게된 이유 왼쪽 동영상은 기존에 구현했던 화면입니다. 그리고 디자이너분이 새롭게 오른쪽 동영상처럼 더 이쁜 디자인을 만들어 주셨습니다. 피드 홈에서는 사용자의 여행 후기를 보여주는 포스트 cell로 이루어진 컬랙션 뷰로 위 화면이 구성되어있는데 기존 구현은 컬랙션 뷰의 flow layout을 이용했습니다. TableView vs CollectionView 선택 과정.. 피드의 cell 구성입니다. 컬랙션 뷰를 선택한 이유는 cell의 높이가 서로 다르기 때문입니다. (초기에는 thumbnail 영역 뷰 높이 또한 이..
[iOS] super 클래스에서 발생되는 delegate! sub class의 delegate로 한번에 처리하기 | Base view #1 안녕하세요. 벌써 수확의 계절이 왔네요. (전 이제부터 시작인데,,🌻 ㅎㅎ) 요즘은 앱 개발을 할 때 어떻게 공통적인 코드들을 줄일 수 있고 쉽게 활용할 수 있을지를 고민하며 개발을 합니다. 오늘은 view 타입의 Base(super) class에서 선언한 delegate와, base class를 상속받은 sub class에서 어떻게 sub class에서 추가적으로 발생하는 또 다른 delegate를 super class의 delegate와 같이 sub class의 한 개의 프로퍼티에서 수행할 수 있는지 해결 과정을 글로 작성하려고 합니다: ] 공통 뷰와 BaseDelegate를 구현하게 된 상황 지금 개발중인 "여행을 가다" 앱에서는 위와 같은 컴포넌트들이 있습니다. 제가 생각했을 때 이 사진에서 공통..
[iOS] DequeueReusableCell 정말 자세하게 파해치기 with TableView +_+ | 재사용 큐로 인한 문제!! 안녕하세요!! 오늘은 DequeueReusableCell deep dive를 해보려고 합니다. 친한 형과 대화하다가 저도 궁금했던,, 추가적인 개념을 얘기하면서 배웠고 포스트로 정리하려고 합니다. MVVM 패턴에 대한 의견 공유 중 "cell's model은 vm이 가질 때" 에 관한 얘기가 나왔습니다. cf(참고). 개인적으로 cell 또한 view이고 결국 view는 model이 vm을 통해서 하위 레이어가 관리되야 한다는 생각이 있습니다. 핑크 화살표로 읽어 가시면 됩니다!! DequeueReusableCell을 DeepDive 하게 된 계기 많은 내용이 오갔고 생략됬는데 MVVM 패턴에 대한 제 생각은 cell's vm에서 cell's model에 대한 처리를 해주면 좋겠다는 생각이었습니다(서버의..
[iOS] UnitTest?! 테스트 코드를 짜면 좋은 이유 | Protocol을 통한 의존성 주입+역전 개념 완전 뿌수기 안녕하세요!! 요즘 에어컨 빵빵한 곳에 있으니 공부가 잘 되네요. 오늘 "테스트 코드"를 일부 주제로 열정 빵빵한 부트캠프 팀원들과 의논하며 테스트 코드에 대해 의견을 나누며 공부 했습니다!!! 제가 테스트 코드를 작성하며 알게된 뜻밖의 장점?과 프로토콜을 사용하는 이유와 프로토콜의 장 단점, 의존성 주입과 역전 원칙에 대해서 소개하려고 합니다. 추가로 제가 이해한 Stub과 Mock에 대해서 차이도 소개할 것입니다. 소프티어 부스트캠프.. JK님 덕에 정말 좋은 개념들을 알아가게됬습니다... Unit Test. 누구세요? 뭘 테스트하는 거죠? Unit test를 소개하기 전에, 우선 테스트 코드!는 내가 또는 다른 개발자가 구현한 일부 기능이 잘 동작되는지!! sut(system under test)의..
[Test] xcode 14.3에서 code coverage 설정하는 방법 안녕하세요. 오늘은 xcode에서 code coverage를 볼 수 있는 방법에 대해 알려드리려고 합니다.. 우선 제 xcode버전은 14.3입니다. code coverage를 보기 위해서는 아래와 같은 과정을 거쳐야 합니다. 1. Edit Scheme... 클릭 2. Code Coverage 체크박스 클릭! 그런데 제 경우 (xcode 14.3) 읏.. 어디에도 찾아볼 수가 없었습니다.. 그러던 와중.. 스택 오버플로우에서 저와 같은 상황을 겪은 글을 다행히 찾게 되서 해결하게 되었습니다. 1. 여기서 초록색 클릭 후 Edit Test Plan 클릭!! 그 후 메뉴에 있는 Configurations 탭을 클릭하게 되면 Code coverage가 있습니다 :) 저는 추가적으로 .xctestplan을 새..
[iOS] 보이지 않는, 사용되지 않는 subview를 superview로부터 제거하는 방법 | Strong reference 오늘은 또 네트워크 TCP 통신관련 프로젝트를 만들다가 신기한 경험을 했습니다... 사용하지 않는 뷰의 메모리 할당해제 관련 주제입니다. side menu는 잠깐 들어가는 것이고 메인 뷰와 사이드 뷰 둘 다 뷰로 구현했습니다. 그래서 일반적으로 sideView를 보여줘야할 경우에만 인스턴스를 할당하고 hide될 때 해제를 했습니다. sideMenu는 옵셔널로 할당했습니다. 그리고 showSideMenu라는 함수를 실행할 때마다 인스턴스 할당을 했습니다. 저 setLayout함수안에서 view.addSubview(self)를 진행합니다. hideSideMenu에서는 화면 전환 애니메이션 로직을 모두 실행한 이후에 sideMenu = nil처리를 해서 MessageListViewController 내부에 인..