iOS/iOS Swift 개발 일기

iOS swift 재사용 매커니즘

Developer-Michelle 2022. 5. 29. 15:39

재사용 매커니즘

iOS특유의 부드러운 화면을 위해 사용되는 몇 가지 매커니즘 중 하나.

 

1) 테이블 뷰가 화면에 나타낼 셀 객체를 자신의 데이터 소스에게 요청. (tabelView(_:cellForRowAt:) 사용)

2) 데이터 소스는 테이블 뷰의 재사용 큐에서 사용 가능한 셀이 있는지 확인하여 만일 있으면 그 중 하나를 꺼내서 전달하고, 없으면 새로운 셀 생성

3) tabelView(_:cellForRowAt:)메소드가 셀의 콘텐츠를 구성한 다음 반환하면 테이블 뷰는 이 셀을 받아 화면에 표시.

4) 사용자가 테이블뷰를 스크롤함에 따라 화면을 벗어난 셀은 테이블 뷰에서 제거되지만, 완전히 삭제하는 것이 아니라 재사용 큐에 추가됨

5) 사용자의 스크롤에 따라 1~4 과정을 반복.

 

 

웹상의 섬네일 이미지를 읽어오는 코드를 구현했을 때 화면 스크롤이 원활하지 않은걸 해결하려면...

iOS개발에 관하여 다음과 같은 프로그래밍 원칙을 적용해야함.

 

1)반복적으로 호출되는 메소드의 내부에는 네트워크 통신 등 처리 시간이 긴 로직을 포함하지 않아야 한다.

2)네트워크 통신을 통해 읽어온 데이터는 재사용할 수 있도록 캐싱처리하여 될 수 있으면 네트워크 통신 횟수를 줄이는 것이 좋다. (메모이제이션 기법)

프로그램이 동일한 계산을 반복해야 할 때 이전에 계산한 값을 메모리에 저장함으로써 반복 수행을 제거하고 프로그램의 실행속도를 빠르게 하는 기술. (이미지를 네트워크로부터 읽어오는 것도 일종의 계산임.)

3)네트워크 통신이나 시간이 오래 걸리는 코드를 사용할 때는 비동기로 처리하는 것이 바람직.

 

 

swift 에서 크게 2가지 방식의 비동기 구현 기능을 제공.

1) 델리게이트 패턴 이용

네트워크 통신 자체에만 국한된 비동기 처리로서 NSURLConnectionDelegate 객체를 이용하는데,

델리게이트 객체에 이미지 내려받기에 대한 처리를 위임한 다음,

내려받기가 완료되면 델리게이트 객체가 특정 메소드를 호출하게 하여 이 메소드 내부에 처리할 작업을 정의하는 방식으로 구현.

 

2) 범용 비동기 함수 이용

DispatchQueue.main.async()

개발자가 내부적으로 프로세스나 스레드에 직접 접근하지 않고도 비동기 방식으로 처리를 할 수 있도록 지원.

블록(block) , GCD(Global Central Dispatch)를 이용

GCD: 애플에서 개발한 기술. 병렬처리와 스레드 풀에 기반을 둔 비동기 방식을 구현해줌으로써 멀티코어 프로세서에 최적화된 앱을 지원하고자 만들어진 것.

이 함수는 디스패치 큐를 생성하여 비동기 실행 흐름을 만들어내고, 그 흐름 위에서 원하는 코드가 독립적으로 실행되도록 해준다.

 

 

요약:

비동기기법 - 이미지를 내려받을 때를 위한 처리

메모이제이션 기법- 테이블 뷰에서 제거된 셀이 재사용 큐에 의해 다시 구성될 때를 위한 처리

 

 

 

출처: 꼼꼼한 재은씨의 swift 기본편 p661~