늘 헷갈렸던 건데, 이번에 배워서 까먹을 때마다 보려고 정리해 둔다. Observable의 주 특징 unicast 네트워크 수업에서 들었던 unicast. 네트워크에서는 프레임을 딱 하나의 목적지로만 보내는 것을 의미하는데, 여기서는 약간 다른 뜻으로 사용된다. Observable을 여러 군데서 subscribe 할 때마다, create를 호출해서 Observable을 새 성한다. class A { func push() -> Observable { return Observable.create { observer in observer.onNext(Int.random(in: 1...100)) return Disposables.create() } } } 다음과 같이 랜덤 한 Int값을 내보내는 Observab..
프로필 화면에 들어가면 많이 사용되는 탭바 NestedScrollView를 구현해 보았다. 사용 라이브러리 tabman snapkit 구현 결과물 구현 방식 2개의 스크롤 뷰를 이용. overlay scrollview: 직접적인 스크롤이 일어나는 스크롤 뷰 container scrollview: UI가 들어갈 스크롤 뷰. container scrollview: HeaderView와 하단 탭바뷰로 구성 overlay ScrollView의 content Size를 headerView의 height + 현재 선택된 탭바의 ViewController의 scrollView(tableView 혹은 collectionView)의 contentSize의 height값을으로 만든 후, overlay scrollView의..
이전 글에 이어서 PHPicker로 가져온 이미지를 FilManager를 이용해 저장하고, 저장한 이미지를 가져와서 보여주려고 한다. 가져온 이미 지는 png() 메서드를 사용해서, png 데이터로 변경 후 png 형식으로 저장했다. func savePetImage(petId: String, petImageList: [Data]) throws { guard let defaultDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return } let petImageDirectoryURL = defaultDirectory.appendingPathComponent(petId, conform..
PHPicker로 가져온 이미지 방향이 회전 PHPicker를 이용하여 이미지를 여럿 선택하여 ImageView에 렌더링 할 때, 이미지 방향이 바뀌는 문제가 발생했다. 또 가져온 UIImage를 png() 함수를 이용해 Filemanager에 저장한 후, 해당 이미지를 가져와서 다시 UIImage로 렌더링 할 경우에도 같은 문제가 발생했다. 원인은 UIImage.Orientation 때문이었다. iOS에서 카메라로 사진을 찍을 때, 여러 방향에서 사진을 찍을 수 있다. 이때, 사진을 저장할 때, 기본적으로 가로모드 (카메라가 왼쪽에 있는 방향)를 기본으로 사진을 저장한다. 즉 사진을 찍었을 때, 세로 모드로 찍었어도, 저장될 때 가로 방향으로 픽셀 데이터를 인코딩하여 저장한다. 왼쪽 사진처럼 세로 모드..
NSCollectionViewDiffableDataSource는 편리하다. 기존 dataSource와 다르게 SnapShot에 섹션과 데이터를 넣고, DiffableDatasource에 apply만 해주면, 애니메이션이 적용되면서 즉각적으로 변경이 된다. 하지만 사용할때 주의해야 할 점이 있다. 기존 CollectionViewDataSource를 채택해서 reloadData()를 수행 했을 때, CollectionView에 보이는 모드 셀이 reload 되면서 cellForItemAt 함수를 호출하는 방식이였다. 그래서 reload가 되면 셀이 바뀌든 바뀌지 않았든 해당 화면에서 보이는 셀은 다시 cellForItemAt에 의해 셀이 그려지는 방식이었다. 하지만 DiffableDataSource는 app..
Hazard란? 다음 사이클에 다음 명령어를 실행하지 못하는 상태 Structure hazard 어떤 명령어를 실행하기 위한 리소스가 이미 사용 중이어서 실행하지 못하는 상태 예시) 싱글 메모리를 사용한다고 가정. Load/Store 명령어가 데이터를 가지고 오려고 할 때 해당 메모리에 액세스 함. 그 후 다음 명령어를 가지고 오려고 메모리에 액세스 하려고 하지만, 이전 명령어의 데이터 Load로 인해 대기를 해야 함. 즉 프로세서의 구조에 의해 발생하는 hazard므로, 이를 structure hazard라고 함. 예시에서는 프로세서가 싱글 메모리 구조로 인해 hazard가 발생 Data hazard data dependency에 의해 발생. 이전 명령어의 데이터(결과값)를 사용해야 하는데, 아직 작업..