Simple TableView 정리

> 테이블 뷰 스타일 : 플레인(Plain), 그룹드(Grouped)

> contentView

 테이블 뷰 셀에 내용을 표시하는 전체를 가리킴

다음에 나오는 구성요소들의 슈퍼뷰

> textLabel

 UILabel의 인스턴스 오브젝트

 문자열 표시할 때 사용

> imageView

 테이블 뷰의 왼쪽에 자리잡고 있으며 주로 썸네일이나 아이콘을 표시하는데 사용

> accessoryView

  테이블 셀의 속성을 표시하기 위한 뷰

> detailTextLabel

 textLabel의 내용을 보조하는 내용이 들어가는 레이블

> 테이블 뷰의 동작 방식

 1. 테이블 뷰가 자신에게 데이터를 공급할 책임이 있는 데이터 소스 오브젝트를 찾음

 2. 데이터 소스를 찾았다면 제일 먼저 몇 개의 섹션을 준비해야 할지 물어봄

    numberOfSectionsInTableView:메소드가 호출

 3. 섹션의 개수가 정해졌다면 각 섹션별로 준비해야 할 로우(row)의 개수를 물어봄

    TableView:numberOfRowsInSection:메소드가 섹션의 개수만큼 호출됨

 4. 섹션과 각 섹션별 로우의 개수가 완전 정해졌다면 테이블 뷰의 크기는 결정되었음.

    이제 각 섹션의 로우별로 어떤 테이블 셀을 채워넣어야 할지 물어봄

   TableView:TableViewcellForRowAtIndexPath:메소드를 통해 각 섹션별 로우에 그려져야

    할 테이블 셀을 만들어서 리턴

 -  테이블 뷰에는 데이터소스와 델리게이트 오브젝트를 필요로 함

 -  데이터소스는 테이블 뷰에 정보를 뿌려줄 책임있는 오브젝트, 델리게이트는 테이블 뷰에서 발생한 여러가지 이벤트를 대신 처리해줄 오브젝트

 -  데이터 소스 역할을 하는 컨트롤러 오브젝트 내에서 델리게이트 프로토콜 메소드를 구현해 테이블 뷰에 뿌려줘야 하는 형식

 -  테이블 뷰에 기본적인 내용을 표시하는데 있어 UITableViewDatasource 프로토콜은 매우 중요한 메소드를 포함한다.

 - 필수적인 메소드

   -(NSInteger)numberOfSectionsInTableView:(UITableView*)TableView

     테이블뷰에 몇개의 섹션이 있는지 리턴

   -(NSInteger)tableView:(UITableView*)TableViewnumberOfRowsInSection:

    (NSInteger)section

      각 섹션별로 몇개의 로우를 준비할지 리턴

   -(UITableViewCell*)tableView:(UITableView*)TableViewcellForRowAtIndexPath:

    (NSIndexPath*)indexPath

     각각의 색션에 있는 로우자리에 들어갈 테이블셀을 구성해서 리턴

> NSIndexPath : 테이블 뷰의 각 로우를 지정하는데 사용되는 오브젝트

                          테이블뷰의 위치를 지정하는데 사용하기 위해 확장되었으며 섹션과 로우값을 가짐

                         .section과 .row를 통해 섹션과 로우를 알 수 있다.

> 재사용 큐

  테이블 뷰는 내용만 다를뿐 모양은 반복. (반복되는 뷰를 얼마나 잘 관리하느냐가 테이블 뷰의 퍼포먼스를 좌우하는 기본적인 요소)

-tableView:cellForRowAtIndexPath:

 테이블 뷰 셀을 만들어 리턴, 테이블 뷰의 내부에 있는 버퍼를 이용해 메모리를 효율적으로 사용흐는 기법이 사용

재사용 큐라고 부르는 버퍼는 스크롤되어 화면 밖으로 사라지는 테이블 셀을 임시로 지니고 있다. 화면 밖으로 사라지는 셀이 있으면 새롭게 추가되는 셀도 있을 것이다. 새로 뿌려져야 하는 셀을 만들기 전에 테이블 뷰는 재사용 큐를 먼저 살핀다. 재사용 큐에 새로 만들고자하는 테이블 셀과 동일한 형태의 셀이 있다면 새로 테이블 뷰 셀 오브젝트를 만들지 않고 이미 만들어져 있는 재사용 큐에 있는 테이블 뷰 셀에 값을 바꿔서 테이블 뷰에 넣어준다.

-----------------------------------------------------------------------------------------

저는 좀 융통성이 없기 때문에- 물론 다들 검색 잘하셨겠지만.

좋은 블로그, 카페 알려드릴께요.

http://blog.naver.com/yooninsung?Redirect=Log&logNo=30085373382

http://blog.naver.com/philipousys/130074327578

http://blog.naver.com/warlord0916?Redirect=Log&logNo=90083710091

http://theeye.pe.kr/entry/iPhone-Object-C-Declared-Properties

제 블로그보고 짜증내지 마시고;;; 여기 가보세요ㅋ

--------------------------------------------------------------------

Chapter 4하면서 ㅠㅠ 어려웠던 부분

확신이 가지 않음ㅠㅠ(제대로 공부한지 2틀..3일..됨)ㅠㅠ

 // setter 메소드

-(void) setCandleOffImage:(UIImage*)newImage

{

   UIImage *oldImage = candleOffImage;

    // candleOffImage's retain is 1

   if(oldImage != newImage)

   {

        candleOffImage = [newImage retain];

        // newImage's retain is 1

        if(oldImage != nil) [oldImage release];

      // candleOffImage's retain is 0

    }

    // if가 참일때.  candleOffImage's retain is 1

    //  if가 거짓일때, newImage's retain is 1

}

일단 setter메소드를 보면..(맨첨엔 무작정봤는데ㅠ)

어느 인스턴스변수에 저장하려고 호출하였는지 파악해야..합니다.(당연..)

변수이름을 보니 candleOffImage(UIImage) 인스턴스변수에 저장하려고 하는거죠?

따라서 candleOffImage변수에 뭔가가 저장되어야 합니다.(바른말로 가리켜야 하죠;)

근데 우리가 candleOffImage에 알맞은 이미지가 저장되어 있는지 모릅니다.

그래서 일단 지역변수(?ㅠ)에 저장시켜 둡니다.

그리고 if()문에서 candleOffImage변수가(oldImage변수가 가리키고 있음) newImage변수가 같은지 확인합니다.

만약 같으면 맞게 저장되어 있는것이므로 더이상 candleOffImage에 이미지를 저장하지 않아도 됩니다.

만약 다르면!

새 이미지(newImage)를 candleOffImage변수가 저장시켜주고

잘못된 이미지를 가리키고 있는 oldImage변수를 release시켜줍니다.



출처 : http://blog.naver.com/PostList.nhn?blogId=heajin722¤tPage=36
Posted by 오늘마감