TIL58 ✨

YaR Lab·2023년 7월 12일
0

TIL✨

목록 보기
46/135
post-thumbnail

🗓️23.07.12

✅ GCD 기본

📌 Serial/Concurrent

1️⃣ Serial

  • 단일 스레드 환경
  • .main

2️⃣ Concurrent

  • 다중 스레드 환경
  • global()

📌 sync/async

1️⃣ main.async

  • 메인스레드 비동기
    2️⃣ global().async
  • 글로벌스레드 비동기
    3️⃣ global().sync
  • 글로벌스레드 동기
    4️⃣ main.sync

📌 DispatchWorkItem

  • 코드 블록을 캡슐화해줄 수 있음
  • 정의된 DispatchWorkItem은 sync와 async 메서드의 execute 파라미터를 통해 전달하면 됨

📌 asyncAfter

asyncAfter은 async 메서드를 원하는 시간에 호출해줄 수 있는 메서드

DispatchQueue.global().asyncAfter(deadline: .now() + 5, execute: yellow)
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 5, excute: blue)

📌 asyncAndWait

비동기 작업이 끝나는 시점을 기다릴 수 있음

DispatchQueue.global().asyncAndWait(execute: yellow)
print("Finished!")

📌 DispatchQueue의 초기화

지난 챕터에서는 이미 구현되어 있는 DispatchQueue인 main과 global()을 사용했었는데요, 이전에 DispatchQueue도 커스텀하여 사용할 수 있다

convenience init(label: String,
                 qos: DispatchQoS = .unspecified,
                 attributes: DispatchQueue.Attributes = [],
                 autoreleaseFrequency: DispatchQueue.AutoreleaseFrequency = .inherit,
                 target: DispatchQueue? = nil)

1️⃣ label

  • DispatchQueue의 label을 설정해주는 파라미터

2️⃣ qos

  • qos는 DispatchQoS 타입의 값을 받는 파라미터
  • 여기서 QoS란 Quality of Service의 약자로, 실행 될 Task들의 우선 순위를 정해주는 값

3️⃣ attributes

  • attributesDispatchQueue의 속성을 정해주는 값임
  • .concurrent로 초기화한다면 다중 스레드 환경에서 코드를 처리하는 DispatchQueue가 되는 것임
  • 이 값을 빈 배열, 즉 기본 값으로 아무 설정을 하지 않는다면 Serial DispatchQueue를 만들게 됨
    4️⃣ autoreleaseFrequency
  • DispatchQueue가 자동으로 객체를 해제하는 빈도의 값을 결정하는 파라미터입니다. 즉 객체를 autorealease해주는 빈도이며 기본값은 inherit임

    – inherit: target과 같은 빈도를 가집니다.
    – workItem: workItem이 실행될 때마다 객체들을 해제합니다.
    – never: autorelease를 하지 않습니다.

5️⃣ target

  • 코드 블록을 실행할 큐를 target으로 설정할 수 있습니다.

📌 OperationQueue

📌 addExecutionBlock(() -> Void)

메서드를 호출하면 Operation의 동작이 끝나고 난 후에 원하는 코드를 실행해줄 수 있음

터미널 한글 깨짐 적용

스트링 포멧터

static let startTask = "%d번 고객 업무 시작"

print(String(format: BankNamespace.startTask, customer.waitingNumber))
            print(String(format: BankNamespace.endTask, customer.waitingNumber))

네임스페이스

case와 static le 구분 하기
case일때만 case 사용! (feat. 나만의 기준)

0개의 댓글