0

UITableViewDataSourceプロトコルのCellForRowAtIndexPathメソッドは次のとおりです。私はそのコードをウェブサイトで見ました。

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
        static NSString *TableIdentifier = @"SimpleTableItem";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:TableIdentifier];

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

        cell.textLabel.text = [playersReady objectAtIndex:indexPath.row];
        return cell;
}

私の質問は次のとおりです。

  1. ここで定義されたのcellはなぜ= [tableView dequeueReusableCellWithIdentifier:TableIdentifier];ですか?それはどういう意味ですか?そのコードにコメントすれば、すべてうまくいきます。そのコードは何ですか?うーん...

  2. cellinifステートメントは(SimpleTableItem )に等しいnil場合にどのように等しくなりますか?そのコードを書いたのは何ですか?cellTableIdentifier

  3. SimpleTableItemTableIdentifierと等しいのはなぜですか?何のために?

4

2 に答える 2

2

iPhoneには多くのメモリがありません。しかし、最新のコンピューターでも、テーブル内のすべてのセルに対して新しいセルを初期化する必要はありません。それはただのメモリの浪費です。その代わりに、Apple は再利用可能なセルというアイデアを思いつきました。画面いっぱいに表示されるいくつかのセルを初期化するだけです (テーブル ビュー)。次に、ユーザーが下にスクロールすると、画面の下部にいくつかの新しいセルが表示されますが、同時に他のセルが画面の上部に表示されなくなります。したがって、それらの細胞を簡単に取り出して再利用できます。

幸いなことに、UITableView がこれを管理します。そのメソッドで新しいセルをセットアップする必要があるときに必要なのは、再利用できるセルがあるかどうかをテーブル ビューに尋ねることだけです。再利用可能なセルがある場合、dequeueReusableCellWithIdentifier: はそのうちの 1 つを返します。ただし、まだ使用できない場合 (通常は、テーブル ビューを最初のセルで最初に埋めたとき)、nil が返されます。したがって、セルが nil かどうかをテストし、その場合は新しいセルを最初から作成する必要があります。

iOS 6.0 には、dequeueReusableCellWithIdentifier:forIndexPath:常に有効なセルを返す新しいメソッドがあります (再利用可能なセルがまだない場合は、セルを作成します)。

于 2012-08-18T17:01:39.177 に答える
1

テーブル ビュー 一度に画面に表示できるセルのみを作成します。このシステムの後、メモリを保存するためにセルを再利用します。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 20;
}

-(UITableViewCell *)tableView:(UITableView *)tableViewL cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";


UITableViewCell *cell = [tableViewL dequeueReusableCellWithIdentifier:CellIdentifier];

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

    NSLog(@"Cell == nil so create a new cell....");

}else {
     NSLog(@"Reuse Cell ");
}
 return cell;

}

CellIdentifier は、セルを識別するために使用します。たとえば、12 個のセルの最初の 10 個のテーブルにラベルを追加すると、ボタンを追加すると、セルを再利用するときに問題が発生します。そのため、別のセルを作成する必要があります。セルにボタンを追加し、それに識別子を付けるにはストリング。

于 2012-08-18T17:08:43.363 に答える