2013-10-25 3 views
1

나는 dequeueReusableAnnotationViewWithIdentifier 또는 dequeueReusableCellWithIdentifier를 사용하는 이유가 궁금합니다. 예를 들어 defaultPinID 값은 논리적이 아닙니다. defaultPinID의 값을 변경하면 아무 것도 변경되지 않습니다. 그 경우 dequeueReusableAnnotationViewWithIdentifier (키워드 dequeueReusable)를 사용하는 이유는 무엇입니까? 있는 tableView왜 우리는 dequeueReusable 키워드를 사용합니까?

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

     static NSString *CellIdentifier = @"Cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];// why ? 

     if (cell == nil) 
     { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

     } 
     ................ 
     ............... 
     return cell; 

    } 
+1

이전에 표시 한 것과 동일한 셀을 사용하고 새 셀을 만들지 않기 때문에 – user1673099

답변

3

에서 MkMapView

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation 
    { 
     MKAnnotationView *pinView = nil; 
     static NSString *defaultPinID = @"ftffggf"; 
     pinView = (MKAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID]; // why ? 
     ......... 
     ........... 

     return pinView; 

    } 

에서

그것은 자원 일이야, 아무것도 응용 프로그램에서보고에서 변경할 수 있습니다. 하지만 셀을 초기화하기 전에 셀을 재활용 할 수 있다면 사용자가 위아래로 스크롤 할 때 반복해서 할당해야하는 오버 헤드를 절약 할 수 있습니다.

+1

또한 : defaultPinID는 재생 된 셀 tableview/mapview 유형을 식별하는 데 사용됩니다. 한 테이블 뷰에서 여러 유형의 셀을 사용할 수 있고 여러 개의 재사용 가능한 키를 사용할 수 있습니다. – opedge

2

UIView에서 파생 된 리소스의 구성 및 초기화는 상대적으로 비용이 많이 듭니다. TableViews, MapViews 및 CollectionViews는 대개 한 번에 화면에 작은 숫자 만 표시해야하지만 잠재적으로 많은 수의 객체를 스크롤해야합니다 (사용자가지도에서 이동하거나 컬렉션/테이블보기를 스크롤 할 때). Apple 이미 생성 된 데이터 항목의 인스턴스를 다시 사용하기 위해 해당 클래스를 최적화했습니다. 이것은 수천 개의 행에 대한 테이블 뷰를 신속하고 유동적으로 스크롤하는 것입니다. 행이 뷰로 스크롤 될 때마다 완전히 새로운 뷰 객체를 생성 할 필요가 없으며 뷰를 벗어나 스크롤 할 때이를 파괴 할 수 있습니다. 난 그냥 이미 만든 인스턴스를 재사용하고 그것에 표시된 데이터를 변경합니다.

관련 문제