일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 리펙토링
- UICollectionView
- uitableview
- Observable
- map
- 스위프트
- UITextView
- clean architecture
- Xcode
- RxCocoa
- collectionview
- 클린 코드
- ios
- Human interface guide
- 애니메이션
- swiftUI
- 리펙터링
- tableView
- HIG
- combine
- swift documentation
- SWIFT
- rxswift
- ribs
- Protocol
- MVVM
- Refactoring
- 리팩토링
- Clean Code
- uiscrollview
- Today
- Total
목록Background (12)
김종권의 iOS 앱 개발 알아가기
SwiftUI의 bacgrkound와 overlaybackground와 overlay 옵션 모두 특정 뷰에 겹치게 뷰를 배치할 때 사용하는 메소드차이점은 background은 뷰 뒤에, overlay는 뷰 앞쪽에 배치 중첩됨ex) background를 사용하면 뷰 뒷쪽에 배치됨struct ContentView: View { var body: some View { VStack { Text("Hello, world!") .background { Color.blue } } .padding() }}ex) overay를 사용하면 뷰 앞쪽에 배치되므로 뷰가 가려..
dataSource 관리 MVVM 구조에서 보통 dataSource를 사용할 때 아무런 큐 없이 구현하지만, 데이터 처리 최적화를 위해 background 시키고 싶은 경우 중간중간 DispatchQueue.global()를 사용하거나 커스텀 큐를 사용하는 경우가 존재 개발자가 실수로 DispatchQueue.global()를 사용하게 되면, 이 큐는 serial이 아닌 concurrent이므로 value type인 dataSource 배열을 수정과 동시에 읽기를 하다가 크래시가 발생하는 경우가 존재 크래시 - 이전 Memory Access Conflict 글 참고 이럴때는 커스텀 큐를 선언하여 관리하는것이 가장 좋은데, 먼저 queue의 종류를 이해가 필요 DispatchQueue의 종류 3가지 * 이..
URLSessionConfiguration 이란? URLSession 인스턴스를 생성할 때 URLSessionConfiguration를 사용하여 캐시 정책, 타임아웃 지정이 가능 URLSessionConfiguration에서 설정하는 값들 timeout 값 caching 정책 connection requirement ex) URLSessionConfiguration 사용법 // config를 default로 설정한 경우 let configuration = URLSessionConfiguration.default let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil) // config를 내장된 값으로..
DispatchQueue의 종류 main queue (serial queue) global queue (concurernt, qos 설정 가능) custom queue (디폴트는 serial이며 concurrent로 변경 가능) global queue DispatchQueue.global(qos:) global queue는 모두 concurrent queue임을 주의 qos는 Dispatch.QoS.QoSClass 타입 concurrent 큐이고 qos 설정이 가능 qos(quality of service) // 애니메이션과 같은 UI 즉시 업데이트가 필요하며, 멈춘것처럼 보이지 않는 작업들 (유저의 반응) DispatchQueue.global(qos: .userInteactive) // 저장된 문서를 ..
사전 지식) 스위프트의 스레드 스위프트의 main queue는 serial queue이므로, 한 task가 끝나고 난 후에 다음 task를 실행 만약 main.sync로 실행시키면 이 serial queue에 작업이 끝날 때 까지 그 코드에 머물러 있는 상태 queue가 block되고 queue에 넣은 작업들이 완료될때까지 wait 상태 serial queue이므로 이미 block 상태가 되었기 때문에 deadlock 발생 thread safe하게 사용하려면, background thread에서 main.async를 사용하여 순서에 맞게 UI업데이트가 되도록 구현 크게 main(serial)과 global(concurrent)가 존재 async와 concurrent의 차이 async, sync 단일 작업..
* 타이머 종류 - foreground에서만 동작하는 Timer - background에서도 동작하는듯한 Timer Foreground에서만 동작하는 Timer 변수 하나를 선언해놓고 RxSwift의 연산자 interval(_:scheduler:) 사용 // ViewController.swift private var currentCount = 0 private func setupOnlyForegroundTimer() { let timer = Observable.interval( .seconds(1), scheduler: MainScheduler.instance ) timer.withUnretained(self) .do(onNext: { weakSelf, countValue in weakSelf.curre..
1. Timer 구현하기 - UIDatePicker 개념, Timer로 구현 방법 2. Timer 구현하기 - DispatchSourceTimer로 구현 방법 (Background에서도 동작) 3. Timer 구현하기 - CircularProgressBar UI 구현(CAShapeLayer 사용), DispatchSourceTimer와 Timer로 타이머 구현 방법 아이디어 첫 번째 화면에서 UIDatePicker를 통해 시간을 선택하고 확인을 누르면 먼저 DispatchSourceTimer로 만든 모듈이 동작 확인 버튼을 눌렀을때 다음 화면에서 직접 만든 CircularTimerView에 타이머 관련된 정보를 표출 첫 번째 화면 SettinTimerVC는 글을 2. Timer 구현하기 - Dispatc..
1. DeepLink (딥 링크) - 앱 푸시, APNs (Apple Push Notification service ) 개념 2. DeepLink (딥 링크) - URL Scheme, URLComponents, Foreground, Background, Not Running 기초 개념 3. DeepLink (딥 링크) - FCM(Firebase Cloud Messaging) remote 푸시 사용 방법 4. DeepLink (딥 링크) -Dynamic Link (다이나믹 링크) 사용 방법 (Firebase, 공유하기 기능) 5. DeepLink (딥 링크) - URL Scheme과 Dynamick Link를 이용한 딥 링크 처리 방법 cf) Push Notification 처리 관련 메소드 총 정리 글은..