1

我想知道为什么我们使用 dequeueReusableAnnotationViewWithIdentifier 或 dequeueReusableCellWithIdentifier ?例如 defaultPinID 值不符合逻辑。如果我更改 defaultPinID 的值,则没有任何变化。在那种情况下,为什么我们使用 dequeueReusableAnnotationViewWithIdentifier(Key word dequeueReusable) ?

在 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;

    }

在表视图中

 - (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;

    }
4

2 回答 2

3

这是一个资源的事情,从查看应用程序来看没有什么改变。但是,如果单元格在它已经被初始化之前能够被回收,那么它可以节省一些开销,因为用户必须在用户上下滚动时一遍又一遍地分配它。

于 2013-10-25T13:43:18.860 回答
2

UIView 派生资源的构造和初始化相对昂贵。由于 TableViews、MapViews 和 CollectionViews 通常一次只需要在屏幕上显示一小部分,但需要滚动可能大量的对象(当用户在地图上平移或滚动浏览集合/表格视图时)Apple优化这些类以重用已创建的数据项实例。这就是使数千行的表格视图滚动快速和流畅的原因 - 它不必在每次一行滚动到视图时创建一个全新的视图对象,然后在它滚动到视图之外时销毁它。我只是重用一个已经创建的实例并更改其上显示的数据。

于 2013-10-25T13:48:57.050 回答