1

なぜ dequeueReusableAnnotationViewWithIdentifier または dequeueReusableCellWithIdentifier を使用するのか疑問に思っています。たとえば、defaultPinID 値は論理的ではありません。defaultPinID の値を変更しても、何も変わりません。その場合、dequeueReusableAnnotationViewWithIdentifier(キーワード 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 に答える