테이블 뷰를 화면에 표시할 때 표시될 데이터가 너무 많다면?

→ 엄청난 메모리가 낭비될 것

그것을 위해 cellForRowAt 메서드에서 dequeueReusableCellWithIdentifier에서 표시할 셀이 없다면 새로 생성하고, 있다면 이미 생성된 셀을 불러오는 역할을 해줍니다.

→ 즉 스크롤 할 때 마다 cellForRowAt 메서드가 호출되기 때문에 저 메소드에는 처리시간이 긴 로직을 포함하는게 좋지 않습니다.

이를 위한 비동기 처리가 바람직하다

비동기 처리란?

동기 처리부터 먼저 알아보자면 앞서 실행되어야 할 일이 끝나기 전까지 다음 일을 하지 않는 것입니다.

그렇다면 비동기 처리는 시간이 많이 걸리는 일을 하는 동안 다른 일을 진행하는 것을 의미한다고 이해하면 되겠네요. 책에서 깔끔하게 정리한 문장을 봤는데 “긴 시간이 걸릴 것으로 예상하는 기능을 새로운 실행 흐름을 만들어서 실행하는 방식"을 비동기 프로그래밍이라 합니다. 지금 봤을 땐 아무리 봐도 비동기처리가 대기시간을 줄이는 똑똑한 방법이라고 생각되지만, 업무의 구성이 복잡해진다는 특징이 있습니다.

스위프트에서의 두가지 비동기 구현 기능??

  1. 델리게이트 패턴: NSURLConectionDelegate 객체를 이용하는 방법인데, 델리게이트 객체에 이미지 내려받기에 대한 처리를 위임한 후 내려받기가 완료되면 델리게이트 객체가 특정 메소드를 호출하게 하여 이 메소드 내부에 처리할 작업을 정의하는 방식으로 구현
  2. 범용 비동기 함수를 이용하는 것: DispatchQueue.main.async()를 통해 개발자가 내부적으로 프로세스나 스레드에 직접 접근하지 않고도 비동기 방식으로 처리를 할 수 있도록 지원. 여기에는 블록과 GCD(톡방에서 본 적이 있는데 뭔지는 기억이 잘 안나는,,,) 이 함수는 디스패치 큐를 생성하여 비동기 실행 흐름을 만들어내고, 그 흐름 위에서 원하는 코드가 독립적으로 실행되도록 해줌.

일반 뷰 컨트롤러에서 테이블 뷰 사용하기