티스토리 뷰
안녕하세요!! 저번에에 TableViewController에 대해서 배웠죠?
그 때 중간에 dequeueReusableCell이 뭔지 알려드린다고 했었는데.. 기억나시나요?
뭔지 까먹으신 분들을 위해 보여드리자면,
저기의 dequeueReusableCell!! 보이시나요?
오늘은 저게 뭔지 알아볼거에요 ㅎㅎ
dequeueReusableCell
일단 모르는게 생기면 가장 먼저 애플 문서를 찾아보는 게 좋겠죠? 한번 봅시다.
ㅎㅎ...그럼 엄청나게 긴 글을 볼 수 있습니다.
하나하나 살펴볼게요. 일단 이게 무슨일을 하는건지 살펴보겠습니다.
그럼 메소드의 원형을 알아야겠죠?
애플 문서에 나온 dequeueReusableCell 메소드의 원형입니다.
파라미터로 2개를 받네요. withIdentifier와,for.
그리고 UITableViewCell을 반환합니다.
원형도 봤겠다.. 이제 이 함수가 하는일이 뭔지 알아봅시다.
"지정된 재사용 식별자에 대한 재사용 가능한 테이블 뷰 셀 객체를 반환하고,
이를 테이블에 추가합니다."
라고 하네요..
이게 무슨소리일까요?
일단 분석해봅시다.
우리가 사용한 코드는
이거죠?
지정된 (재사용) 식별자라 함은 withIdentifier가 되겠네요.
정확히 이 identifier를 주면, 어떤일을 할까요?
여기에는 위에 쓴 "cell"처럼 string이 들어가게 됩니다.
이는 재사용할 객체를 나타내는 문자열이 되게 돼요.
그리고 반드시 nil이면 안됩니다.
아! 정리해보면
우리가 지정해주는 string형 identifier는 재사용할 객체를 나타내주는 거네요.
그럼 for?는 뭘까요?
indexPath를 받고있죠?
이 indexPath는 어디서 온거죠..?
"cell"은 우리가 준걸로 기억하는데...
저 코드가 어디 메소드 안에 들어있었는지 기억하시나요?
저 tableView메소드 안에 있었죠?
tableView메소드는 파라미터로 UITableView와 IndexPath를 받네요?
받은 IndexPath의 이름을 indexPath라고 해준겁니다.
그것을 이 메소드 안에서 당연히 쓸 수 있겠죠?
이제 저 for파라미터에 대한 애플문서의 설명을 봐볼까요?
"셀의 위치를 지정하는 인덱스 패스입니다.
데이터 소스는 셀에 대한 요청이있을 때이 정보를 수신하며 이를 전달해야합니다. 이 방법은 인덱스 경로를 사용하여 테이블뷰에서 셀의 위치를 기반으로 추가 구성을 수행합니다."
라고 하네요.
어..이제 dequeueReusableCell 메소드에 대해서는 조금 알 것 같네요.
하지만 이걸 왜써??!
네. 가장 중요한 질문이죠.
도대체 왜 쓸까요? dequeueReusableCell을?
자, 상상을 해볼게요. 우리는 지금 테이블뷰에대해서 이야기 하고 있죠?
1000개의 항목(엔트리)을 가지는 테이블이 있다고 생각해볼게요.
그럼 테이블을 만들 때, 이 1000개의 엔트리를 셀마다 만들테고,
이 1000개의 테이블 뷰 셀에대해 메모리 할당이 이루어지게됩니다.
만약 1000개가 아니라 만개라면? 이만개? 메모리는 아주많이 들겠죠?
이를 방지하기 위해 나온 것이 바로 dequeueReusableCell랍니다 :)
dequeueReusableCell의 목적은 바로 메모리를 줄이자!라는 것입니다.
이 dequeueReusableCell을 사용하게 되면,
음..만약에 지금 제 화면에서 테이블 뷰 셀을 6개를 볼 수 있다고 가정해볼게요.
현재 화면에서요. 나머지는 스크롤해서 볼 수 있다고 생각해보자구요.
그럼, 이 테이블뷰는 테이블높이와 셀 높이를 기반으로 정확하게 셀 수를 생성해요.
네. 6개를 요.
그럼 현재 시점에서 메모리 할당은? 네. 6개의 셀에대한 메모리 할당만 이루어지면 되는것이죠.
이제, 테이블 뷰를 스크롤 해볼까요?
여전히 동일한 셀이 사용되지만, 데이터소스(DataSource)를 기반으로 셀 내용이 바뀌게 된답니다.
셀이 스크롤 화면 밖으로 밀려나면, 이 셀은 reuse pool에 들어가게 되고,
우리가 dequeueReusableCell을 호출할 때 테이블 셀에 의해 반환이 된다고 합니다.
ㅎㅎ앱 성능을 위해서는 꼭 써야겠죠?
도움이 되었으면 좋겠어요!! 지적할 점이나 궁금한 점은 댓글이나
채널서비스를 이용해주세요 XD
'iOS' 카테고리의 다른 글
let us:Go! 두번째 세미나 후기 (0) | 2017.06.25 |
---|---|
iOS ) tableView Delegate, Datasource tutorial (3) | 2017.06.22 |
생기초 TableViewController 사용법!! (5) | 2017.04.03 |
let us : Go! 세미나 후기! (0) | 2017.04.03 |
UnitTest의 사용법 (4) | 2017.03.22 |
- 피아노
- Combine
- 제이슨 파싱
- swift sort
- swift array
- fastlane
- IOS
- Accessibility
- FLUTTER
- np-hard
- swift3
- WWDC
- UIBezierPath
- github
- swift delegate
- swift 공부
- np-complete
- actor
- Xcode
- ios 13
- WidgetKit
- 스위프트 문법
- SwiftUI
- 회고
- swift tutorial
- Git
- iOS delegate
- 스위프트
- Swift
- WKWebView
- Total
- Today
- Yesterday