2016-09-09 6 views
1

나는 reuseIdentifierstatic 여부를 내부 tableViewdelegate 방법을 사용하여 tableView 메모리 할당 과정에 대해 확실하지 않다. 우리는 한 번에 [UITableViewCell alloc]alloc 메서드를 호출하여 cellForRowAtIndexPath 방법 후 메모리에 할당되는 방법을 cell 많은 numberOfRowsInSection 방법 다음 메서드에서 반환하는 배열의 20 수를 경우있는 UITableViewCell 메모리 할당

은 가정하자.

예제 코드 : 유용한 설명뿐만 아니라 시간에 대한 감사를 이해할 수있을 것이다

(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 20; // array count 
} 

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *MyIdentifier = @"MyIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 

    if (cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:MyIdentifier]; 
     // how many cell will be alloc here 
    } 

// configure cell 
} 

.

+0

행의 '높이'란 무엇입니까? – pkc456

+0

@ pkc456'높이'는'default'에 감사드립니다. – vaibhav

+0

나는 이것을 주석으로 추가하려했으나 너무 깁니다. 그래서 내 [대답] (http://stackoverflow.com/a/39406550/988169)를 확인하십시오. – pkc456

답변

3

처음에는보기에서 표보기를 처음 볼 때 (한 번에 화면에 5 개의 셀이 표시됨) 5 개의 셀이 할당됩니다. 아래로 스크롤하면 새 인스턴스를 인스턴스화하는 대신 테이블보기에서 dequeueReusableCellWithIdentifier을 사용하여 이미 존재하는 테이블을 다시 사용합니다. 즉 5 개의 세포가 기억에만 있다는 의미입니다.

따라서은 일반적으로 UITableViewCell 개체가 테이블에 보이는 내용을 표시하기에 충분할 때만 allocate입니다.

이 디자인 패턴은 Object Pooling으로 알려져 있습니다.

+1

그레이트 설명 +1 : –

+0

@JaywantKhedkar 기꺼이 도와 드리겠습니다. – pkc456

1

표시 할 표 셀의 수를 반환하는 [tableView visibleCells] count]을 사용할 수 있습니다. 은 많은 셀이으로 할당됩니다. 아래로 스크롤하면 새 tableviewcell을 만드는 대신 dequeueReusableCellWithIdentifier.dequeueReusableCellWithIdentifier를 사용하여 기존 테이블 뷰가 이미 사용중인 테이블을 재사용하므로 적은 메모리를 사용할 수 있습니다.
예 :
화면이 5 개의 표 셀에 맞을 수있는 경우 재사용하면 테이블에 1000 개의 항목이 있어도 5 개의 표 셀만 메모리에 할당하면됩니다.

+0

감사합니다 @nssam, 여기 보이는 셀을 계산하려면이 줄을 입력하십시오. – vaibhav