Зачем устанавливать свойство customCell на ноль, используя UINib - PullRequest
3 голосов
/ 05 декабря 2011

Я смотрю на пример кода Apple, используя метод UINib для cellForRowAtIndexPath для UITableView:

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

Я не совсем понимаю последние две строки

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

Можеткто-нибудь объяснить, что происходит в этих двух последних строках?спасибо.

1 Ответ

1 голос
/ 05 декабря 2011

Вы должны посмотреть на эту строку:

[quoteCellNib instantiateWithOwner:self options:nil];

Это означает, что NIB создает экземпляр текущего объекта в качестве владельца. Предположительно в вашей NIB вы правильно установили класс владельца файла и в этом классе есть свойство IBOutlet с именем quoteCell. Поэтому, когда вы создаете экземпляр NIB, он устанавливает это свойство в вашем экземпляре, т. Е. Устанавливает self.quoteCell как вновь созданную ячейку.

Но вы не хотите, чтобы свойство указывало на эту ячейку, потому что вы просто использовали его как временную переменную для получения доступа к ячейке. Таким образом, вы устанавливаете cell равным self.quoteCell, чтобы вы могли затем вернуть его из этой функции. Тогда вам больше не нужен self.quoteCell, поэтому вы избавляетесь от него.

[Кстати, я предполагаю, что это использует ARC? В противном случае вы захотите сохранить cell, а затем автоматически освободить его.]

...