iOS

GCD (Grand Central Dispatch)-3 ( 케이스 스터디)

@서비 2022. 4. 1. 00:48

3.  벡 그라운드 테스크 의 활용

 

아래의 코드는 이미지 어레이를 만들어서 애니메이션처럼 순차적으로 변경되도록 하는 코드이다.

실행은 viewDidLoad 함수에서 실행이 되는 코드이다.

1번 벡그라운드 테스크를 사용하지 않은 코드

 

어떤 문제가 있을까? 이미지를 어레이로 만드는 구간의 작업이 헤비 해지면 첫 화면이 나오는 시간이 길어지면서 빈 화면을 출력할 수 있다.

다시 말하면 아래와 같이 화면이 나올 수 있다. 코드를 실행 해야 하기 때문에 첫 화면이 늦게 나오게 되고 그러면서 빈 화면 이후에 첫 이미지가 나오고 그다음 애니메이션 형태로 전환이 된다.

 

1번 코드 실행 시 화면

코드를 벡그라운드 테스트를 사용하는 형태로 수정을 해본다. 아래와 같은 형태이고, 이미지를 어레이로 넣는 구간이 벡 그라운드에서 시작된다. 이후에 작업이 완료가 되면 메인 스레드에 애니메이션 진행 테스크를 집어넣는다.

2번 벡그라운드 테스크를 사용한 코드

 

 

이 경우에 어떻게 화면에 표시 될까? 물론 애니메이션 코드의 실행은 바로 실행은 되지 않을 수 있다. (사실 벡 그라운드 스레드도 상당히 빨라서 바로 실행된다. )

우선은 빈 화면이 나오지 않고 첫 화면이 먼저  나오기 때문에 사용자 입장에서 화면이 로딩이 더 빨리된다고 느낄 수 있다. 또한 view 를 로딩하는데 시간이 걸릴 수 있는데 화면을 로딩하는 것과 애니메이션을 준비하는 것을 동시에 수행할 수 있다. 결국 2번째 코드가 로딩이 더 빠를 것이라고 생각한다.

 

2번 코드 실행 화면

 

정리: 딱 필요한 케이스가 viewDidLoad 함수에서 헤비한 작업을 해야 할 때 사용할 만하다.