M e q u u e R u s a b l e CellWithIdentifierの実行メカニズム


    UITableViewCell *cell = nil;
    
    if([indexPath row] == 0)
    {
        static NSString *kDisplayCell_ID = @"DisplayCellID";
        // ? ?n    // 。
        cell = [self.tableView dequeueReusableCellWithIdentifier:kDisplayCell_ID];
        if(cell == nil)
        {
            // ? ?
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kDisplayCell_ID]autorelease];
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
        else
        {
            // ?
            UIView *viewToRemove = nil;
            viewToRemove = [cell.contentView viewWithTag:kViewKey];
            if(viewToRemove)
                [viewToRemove removeFromSuperview];
        }
        cell.textLabel.text = [[self.dataSourceArray objectAtIndex:indexPath.section] valueForKey:kLabelKey ];
        UIButton *button = [[self.dataSourceArray objectAtIndex:indexPath.section] valueForKey:kViewKey];
        [cell.contentView addSubview:button];
    }
d e q u e R u s a b l CellWithIdentifierメッセージは、UItableViewCellオブジェクトを返します.つまり、UItableViewCellオブジェクトを取得するためのメッセージです.オブジェクトを初期化するとは言わないのは、nil値を返す可能性があるため、cellがnilの場合の処理手順を以下に追加します.この方法は、Identifierパラメータで命名されたUItableViewCellオブジェクトを1つのUItableViewCellオブジェクトプールから取得すると解釈できるかどうか.リソースが不足している場合、このプールは余分なUItableViewCellオブジェクトを自動的にクリーンアップします.オブジェクトを返すことはできませんが、リソースが豊富な場合は、作成せずに呼び出す必要があるときに迅速に戻るUItableViewCellオブジェクトが保存されます.dequeueReusableCellWithIdentifierは、文字通り「列の再利用可能なcell」と理解されていますが、実は簡単に言えばcellプールで、中にはあなたが前に作成したcellが入っています.使用時の注意点:1.再取得されたcellは、データがバンドルされているか、サブビューが追加されている可能性があるので、必要に応じて、textlabelのtextなどのデータとremoveを消去してaddのサブビューを削除します(tagを使用します).2.このような設計の目的は,頻繁なallocとdelloc cellオブジェクトを避けるためであり,それほど複雑ではない.3.設計の鍵はcellとデータの完全な分離キーを実現することであり、「1つの画面に表示されるcellの数」は限られているが、画面がスクロールすると、メソッドを呼び出して新しいcellを取得し、古いcellは画面の外にreuseメカニズムを表示しない.cellが表示する必要があるとき、queueの中から探して、見つけて、内容を設定して、表示するスクロールインタフェースcellが画面から移動されたとき、このcellをqueueの中に捨てて新しいcellを表示するとき、「同じタイプ」(identifier)のcellがあれば、キューから1つ取り出して、データを設定して、queueの中にどれだけのcellがあるかを表示して、これは自動的に制御して注意しなければならないのは、Queueにはcellのインスタンスが格納されており、「プロトタイプ」ではないため、上記のように「ページごとに5つあると仮定します.6番目は1番目のcellを多重化し、7番目は2番目を多重化します.」このような結果は、tableが何行あるかにかかわらず、メモリには実際に1つの画面ほど多くの行のcellを格納するだけで済みます.
			// the cell is being recycled, remove old embedded controls
            //   ?
			UIView *viewToRemove = nil;
			viewToRemove = [cell.contentView viewWithTag:kViewTag];
			if (viewToRemove)
				[viewToRemove removeFromSuperview];
/**このときCELLが多重化されると、このCELLに追加されたコントロール*/