iOS 캠프 TIL - 2021.04.08 목

Updated:

GCD와 Operation - 앨런

  • 인프런에서 iOS 동시성 프로그래밍 강의
  • 2버 창업 경험 후, 30중반 이후 새로운 앱개발을 하고 싶어서 비전공자로 시작

비동기 처리가 필요한 이유

  • 아이폰의 화면은 1초에 60번 리프레싱 해야 함
  • 그 일의 담당은 1번(메인) 쓰레드 이므로 메인쓰레드에 오래걸리는 작업(네트워크 통신 등)을 맡기면 않됨

DispatchQueue(GCD) / OperationQueue

  • 쓰레드를 직접 관리하지 않고, 큐를 이용
  • DispatchQueue
    • 간단한 작업
    • 간단한 함수 위주의 작업
  • OperationQueue
    • 내부가 GCD기반으로 구성됨
    • 복잡한 작업

동기 비동기 개념

  • 비동기 (ASync)
    • 일을 시작 시키고, 작업이 끝날때까지 안기다림
    • 일반적으로 대부분 네트워킹 API들은 따로 비동기 처리 하지않아도 비동기로 구현이 되어있음
  • 동기
    • 일을 시키고 끝날때까지 기다리는 개념
  • 직렬큐는 순서가 중요한 작업, 동시큐는 순서보다는 동시에 여러작업을 처리하는데 사용

GCD의 개념 및 종류

  • 메인 DispatchQueue.main: 메인쓰레드와 동일
  • 큐에는 서비스 품질이라는 개념이 있고, 어떤 경우에 사용하라는 권장이있으니 필요할때 찾아보고 사용하면 된다
  • 글로벌 DispatchQueue.global()
    • global(qos . userInteractive)
    • global(qos: .userInitiated)
    • global() 디폴트
    • global(qos: .utility)
    • global(qos: .backgorund)
    • global(qos: .unspecified)
  • 프라이빗 DispatchQueue(label: )
    • 기본 설정은 Serial큐 이지만 동시큐로 설정 가능

GCD 사용시 주의해야할 사항

  • 컴플리션핸들러의 존재이유
    • 작업이 끝나는 시점을 알아야 처리할 수 있을 것
  • 함수를 return형으로 작성하면 않됨
    • 비동기로 끝나는 시점에 관계없이 바로 return하게 됨

GCD 그룹을 언제 사용할까

  • 작업을 그룹짓고, 특정 그룹이 끝나는 시점을 알고싶을 때 사용
    • 여러 애니메이션 효과가 겹쳐있을 때, 애니메이션이 모두 종료된 시점을 알아야할 때
  • 런치스크린이 끝나고 메인진입시 특정 이미지가 늦게 뜨는것이 잘못된 것은 아니지만 유저 입장에서는 앱이 이상하다고 느낄 수 있다
    • 이미지 로딩이 모두 끝난후 런치스크린을 종료해주면 더 매끄러워질듯

GCD와 Operation의 차이

  • GCD에서는 비동기 작업을 중간에 취소할 수가 없다
  • OperationQueue는 취소/순서지정/정지/상태추적 가능 (구현이 쉽다곤 안했다)

Operation 사용

  • 애플은 Operation 추상클래스를 만들어 뒀고, 이를 상속받아 input, output, main 메서드만 정의 하면 된다

Leave a comment