티스토리 뷰

iOS

iOS ) TableView에서 dequeueReusableCell?

Zedd0202 2017. 6. 22. 12:29
반응형

안녕하세요!! 저번에에 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