일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 비동기
- core data
- 상호배제
- 인프런
- @state
- 운영체제
- 100 days of SwiftUI
- Codable
- scrollview
- async
- forEach
- SwiftUI
- Linked List
- 데드락
- 오브젝트
- IOS
- Algorithm
- 앨런
- 알고리즘
- 동기화
- Apple Developer Academy
- 동시성
- UserDefaults
- 프로세스 스케줄링
- 가상 메모리
- deadlock
- decode
- struct
- COLOR
- Swift
- Today
- Total
목록CS/동시성 (13)
기어가더라도 제대로
상단에서 weak self 를 선언하면 내부 클로저에서도 자연히 적용이 되는데 왜 그렇게 되는지를 알아보자. 예를 들어 메서드로 클로저를 호출하는 뷰컨이 있다고 가정하자. 전역 함수로 이 뷰컨을 생성해서 클로저를 품고 있는 메서드를 실행한다면 func localSomething() { let vc = ViewControler1() vc.doSomething() } class ViewController: UIViewController { let name: String = "뷰컨" func doSomething() { let nameClosure = { [weak self] in print(self?.name) }() } } 위의 함수를 호출했을때 doSomething() 메서드가 호출..
반드시 메인큐에서 처리해야하는 작업 UI 관련일들은 "메인큐" 에서 처리해야한다. 1번 스레드(메인 스레드) 는 계산 로직도 하지만, 화면 표시 작업도 담당한다. 화면을 표시하는 일은 한개의 쓰레드(메인큐, 메인쓰레드)에서만 담당해야한다. 1번 스레드에서도 화면을 업데이트하고 2번 스레드에서도 화면을 업데이트한다면? 그 작업이 같은 유아이작업을 했다면? 운영체제는 어떤 쓰레드의 결정을 따라야하는가? 작업의 끝에 UI를 업데이트 해야하는 경우라면 그 부분만 main 큐에 보내야한다. 다운로드 로직은 다른 큐에서 처리를 하고 이미지를 화면에 표시하는 작업은 Main 큐로 보내서 실행해야한다. 하나의 작업 안에서 다른 큐로 작업을 보낼 수 있다. urlSession의 dataT..
목차 1. 메인큐 2. 글로벌큐 3. 커스텀큐 4. 오퍼레이션 작업의 특성에 따라서 원하는 큐로 보내면 된다. 각 큐가 어떤 식으로 일을 처리하는 지 알고 있으면 좋다. 메인 큐 유일한 한개 직렬큐(시리얼큐) 메인스레드 이용 1번 스레드는 메인 스레드이자 메인큐이다. `DispatchQueue.main.async { }` 처럼 사용 이런 식으로 사용하는데 메인쓰레드에서 사용한다. 예를 들어 우리가 일반적으로 사용하는 명령들은 모두 원래는 이렇게 사용하고 있었다. Swift의 기본 코드는 기본적으로 메인 스레드에서 동작한다. 하지만 명시적으로 저렇게 선언하면 에러가 나는데, 그 이유는 다음에 이야기 // 원래 사용하는 방식 print("print something") // Swift가 내부적으로 처리하는 ..