3

UITableViewのcellForRowAtIndexPathにUINibメソッドを使用したAppleのサンプルコードをいくつか見ています。

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
        static NSString *QuoteCellIdentifier = @"QuoteCellIdentifier";
        QuoteCell *cell = (QuoteCell*)[tableView dequeueReusableCellWithIdentifier:QuoteCellIdentifier];
        if (!cell) {
                UINib *quoteCellNib = [UINib nibWithNibName:@"QuoteCell" bundle:nil];
        [quoteCellNib instantiateWithOwner:self options:nil];
        cell = self.quoteCell;
        self.quoteCell = nil;

最後の2行がよくわかりません

        cell = self.quoteCell;
        self.quoteCell = nil;

誰かがこれらの最後の2行で何が起こっているのか説明できますか?ありがとう。

4

1 に答える 1

1

次の行を確認する必要があります。

[quoteCellNib instantiateWithOwner:self options:nil];

これは、現在のオブジェクトを所有者としてインスタンス化するよう NIB に指示しています。IBOutletおそらくNIBで、ファイルの所有者クラスを適切に設定し、そのクラスに というプロパティを持っていますquoteCell。したがって、NIB をインスタンス化すると、そのプロパティがインスタンスに設定されます。つまりself.quoteCell、新しく作成されたセルに設定されます。

しかし、セルにアクセスするための一時変数としてプロパティを使用しただけなので、そのセルを指すプロパティを保持したくはありません。そのため、その関数からそれを返すことができるように設定cellします。self.quoteCellそしたらもういらないself.quoteCellから手放します。

【ちなみに、これはARCを使っていると思いますか?それ以外の場合は、保持cellしてから自動解放する必要があります。]

于 2011-12-05T18:21:33.367 に答える