전체 글

문제 상황서버에 image 업로드 시 1mb로 용량 제한이 있어 image를 업로드하기 전에 사진 용량을 압축 후 업로드해야 합니다. 해결 과정1. resize 2. 압축과정 병렬 처리 DispatchGroup을 사용해 사진 압축 작업이 끝나는 시점을 파악했습니다. 사진 압축 작업이 끝나면 fromDataDict를 사용해 변환된 사진들의 순서를 사용자가 선택한 순서로 맞춰줬습니다. formDataDict는 Dictionary로 HashTable로 구성돼 있어 키값으로 빠르게 사진에 접근할 수 있습니다.
기존 escaping closure을 사용해 NSItemProvider를 UIImage로 변환하는 작업을 Observable을 사용해 변환했습니다.이후 선택한 사진의 순서가 보장될 수 있게 zip 연산자를 사용해 비동기 처리 stream들을 병합했습니다.
문제 상황 Detail View로 화면 전환하는 과정에서 자식 coordinator를 childCoordinators에 넣어 reference count를 증가시켜 pushToDetail(product:) 스코프가 끝나도 deinit 되지 않게 유지해 줍니다. coordinator의 flow가 끝난 경우 finish() 메소드를 통해 childCoordinators에서 제거해 reference count를 감소시켜 deinit 될 수 있게해줍니다.  coordinator들의 finish() 메소드에는 다음 코드들이 반복되고 있었습니다.flow가 끝난 coordinator의 childCoordinators를 전부 비우는 작업부모 coordinator의 childCoordinators에서 flow가 끝난 c..
문제 상황 coordinator의 장점 중 하나는 화면 전환 로직을 재사용할 수 있다는 것입니다. 새싹 마켓에서는 Detail View를 Search View와 Favorite View에서 접근할 수 있습니다. Search Coordinator와 Favorite Coordinator에서 Detail View로 화면 전환하는 코드를 똑같이 반복하고 있었습니다. 해결 과정DetailCoordinatorable protocol을 만들고 pushToDetail(product:) 제약사항을 추가했습니다.DetailCoordinatorable extension의 pushToDetail(product:)의 구현부에 Search Coordinator와 Favorite  Coordinator에서 반복되는 로직을 작성했습..
문제 상황오.단.완 프로젝트를 진행하면서 nesting subcribe를 지양하기위해 flatMap 연산자를 적용 하는 과정에서 flatMap은 none optional type만 반환해야해 [weak self]로 캡처 리스트를 정의하면 optional binding 과정이 복잡해지는 경우가 발생했습니다. 해결 과정1. weak VS unownedweak캡처된 reference가 nil이 될 가능성이 있을 때 사용합니다.nil이 될 가능성이 있어 optional type입니다.참조하고 있는 인스턴스가 할당 해제됐을 때 캡처한 reference도 nil이 됩니다.unownedunowned는 캡처된 참조의 생명주기가 더 길거나 같은 경우 사용합니다.애플 공식 문서에서는 캡처된 참조가 nil이 되지 않는 경우..
문제 상황SettingRoutineViewModel의 단식 타이머 설정 삭제 버튼을 눌렀을 때 present되는 alert의 확인, 취소 action의 event를 처리하는 코드 작성 후 SettingRoutineViewModel이 deinit 되지 않는 문제가 발생해 memory graph를 확인하니 순환 참조 문제가 발생하고 있었습니다. 문제 원인 deleteAlertActionRelay의 onNext 시 실행되는 클로저는 내부에 클로저가 하나 더 있는 nesting closure 형태입니다. 내부에 있는 closure가 [weak self]로 캡처리스트를 정의해 약한 참조로 self를 캡처하는 것처럼 보입니다. 하지만 내부 closuer가 캡처하는 self는 외부 closure scope에서의 se..
_brick
brick's note