对于UITableViewCell的子类,是保留还是指定为该UITableViewCell的属性

时间:2012-01-06 22:14:31

标签: iphone

我正在查看来自WWDC#2010的TableViewUpdates示例代码中的TVAnimationGestures。在他们的视图控制器子类中,他们有一个这样的出口:

@property (nonatomic, assign) IBOutlet QuoteCell *quoteCell;

然后在他们的cellForRowAtIndexPath中创建它:

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

        if ([MFMailComposeViewController canSendMail]) {
            UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
            [cell addGestureRecognizer:longPressRecognizer];        
            [longPressRecognizer release];
        }
        else {
            NSLog(@"Mail not available");
        }
    }

    Play *play = (Play *)[[self.sectionInfoArray objectAtIndex:indexPath.section] play];
    cell.quotation = [play.quotations objectAtIndex:indexPath.row];

    return cell;
}

我的问题是为什么他们使用属性赋值而不是保留?感谢。

1 个答案:

答案 0 :(得分:0)

出口仅允许以方便的方式访问从笔尖加载的单元格(加载笔尖时所有者是自己的,这意味着在单元格的笔尖中,所有者将被设置为视图控制器的类,整个单元格的出口将链接到quoteCell)。

这比替代方法更方便,即将nib加载到数组中并挑出第一个对象。

出口值立即设置为零,因此如果分配或保留,它实际上没有任何区别。