我正在使用针对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;
有人可以解释最后两行中发生的事情吗?感谢。
答案 0 :(得分:1)
你必须看看这一行:
[quoteCellNib instantiateWithOwner:self options:nil];
这就是说NIB用当前对象作为所有者进行实例化。据推测,在您的NIB中,您已正确设置文件的所有者类,并在该类中具有IBOutlet
属性,名为quoteCell
。因此,当您实例化NIB时,它将在您的实例中设置该属性,即它将self.quoteCell
设置为新创建的单元格。
但是您不希望保持属性指向该单元格,因为您只是将其用作临时变量来访问该单元格。因此,您将cell
设置为self.quoteCell
,以便您可以从该函数返回它。那么你不再需要self.quoteCell
了,所以你摆脱它。
[顺便说一句,我认为这是使用ARC?否则,您将要保留cell
,然后自动发布它。]