| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- ios
- 리팩토링
- Xcode
- rxswift
- 애니메이션
- Refactoring
- swift documentation
- Clean Code
- map
- Observable
- combine
- MVVM
- Human interface guide
- UICollectionView
- 리펙토링
- uitableview
- RxCocoa
- swiftUI
- tableView
- 클린 코드
- uiscrollview
- HIG
- clean architecture
- Protocol
- SWIFT
- ribs
- scrollview
- collectionview
- 스위프트
- UITextView
- Today
- Total
목록Background (14)
김종권의 iOS 앱 개발 알아가기
Request background runtime백그라운드에서 특정 처리를 하고싶은 경우 사용백그라운드에서 생성된 데이터를 바탕으로 ML을 생성하는 등의 처리를 하고 싶은 경우 사용백그라운드에서 DB를 클리어하고싶은 경우 사용등록 방법AppDelegate에서 forTaskWithIDentifier로 등록closure부분에 런타임에 호출할 내용만 작성해주면 완료아래처럼 request를 만들고 submit하면 동작이됨배터리 소모를 최소화하고 앱의 배터리 사용량도 줄어들게 하고싶은 경우?아래처럼 requiresNetworkConnectivity나 requiresExternalPower 파라미터에 값을 세팅하여 섬세한 처리가 가능ex) 작업이 지연에 민감하지 않은 경우? > 충전 중이면서 네트워크에 연결됐을 때만..
백그라운드 처리를 할때 고려하는것백그라운드에서 처리할 때 프로세스 입장에서 고려하는 것들배터리 생명주기공유 자원 (Memory, CPU, 네트워크 대역폭, 저전력 모드, 적은 데이터 모드)ex) 공유 자원 예시 - 포그라운드 관점백그라운드에 너무 많은 자원을 사용하면 비효율적으로 처리가 될 뿐 아니라 포그라운드 경험과도 충돌되므로 백그라운드에 있는것들 종료할 수 있음때문에 백그라운드 작업을 최소화하여 메모리 사용량을 줄여야함또한 사용자가 저전력 모드를 키는 성격을 고려하여 사용자 관점에서 생각하며 설계해야함애플에서 권고하는 백그라운드 처리 방향효율성, 최소성, 탄력성, 신중함, 적응성백그라운드 작업을 한다는 것은 런타임 기회가 생길 때마다 점진적 진행이 가능해야함(시스템 조건과 우선순위를 이해하고 적응할..
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..