我正在查看来自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;
}
我的问题是为什么他们使用属性赋值而不是保留?感谢。
答案 0 :(得分:0)
出口仅允许以方便的方式访问从笔尖加载的单元格(加载笔尖时所有者是自己的,这意味着在单元格的笔尖中,所有者将被设置为视图控制器的类,整个单元格的出口将链接到quoteCell
)。
这比替代方法更方便,即将nib加载到数组中并挑出第一个对象。
出口值立即设置为零,因此如果分配或保留,它实际上没有任何区别。