为什么使用UINib将customCell属性设置为nil

时间:2011-12-05 17:29:16

标签: iphone uitableview uinib

我正在使用针对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;

我不太了解最后两行

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

有人可以解释最后两行中发生的事情吗?感谢。

1 个答案:

答案 0 :(得分:1)

你必须看看这一行:

[quoteCellNib instantiateWithOwner:self options:nil];

这就是说NIB用当前对象作为所有者进行实例化。据推测,在您的NIB中,您已正确设置文件的所有者类,并在该类中具有IBOutlet属性,名为quoteCell。因此,当您实例化NIB时,它将在您的实例中设置该属性,即它将self.quoteCell设置为新创建的单元格。

但是您不希望保持属性指向该单元格,因为您只是将其用作临时变量来访问该单元格。因此,您将cell设置为self.quoteCell,以便您可以从该函数返回它。那么你不再需要self.quoteCell了,所以你摆脱它。

[顺便说一句,我认为这是使用ARC?否则,您将要保留cell,然后自动发布它。]