У меня проблема с утечкой пользовательских ячеек.
В моем переопределенном контроллере UITableViewController,
- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
TwitterTweetTableCell *cell = nil;
// Obtain the cell...
cell = [[TwitterTweetTableCell alloc]
initWithTable:tableView
andTweet:[[self getTimeline] objectAtIndex:indexPath.row]];
return [cell autorelease];
}
И в соответствующем переопределенном классе UITableViewCell,
- (TwitterTweetTableCell *) initWithTable:(UITableView *) tableView
andTweet:(NSDictionary *) tweet
{
tweetCell = nil;
// ************************************************************************************
// The identifier used in the following dequeue is the one set in the corresponding nib
// ************************************************************************************
tweetCell = (TwitterTweetTableCell *)
[tableView dequeueReusableCellWithIdentifier:@"tweetCell"]; // <-- set this in NIB
if (tweetCell)
{
NSLog(@"tweetCell: Reuse!");
}
if(!tweetCell)
{
NSArray *topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:@"TwitterTweetTableCell" owner:nil options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[TwitterTweetTableCell class]])
{
tweetCell = (TwitterTweetTableCell *)currentObject;
break;
}
}
// yadda, yadda, yadda
[tweetCell retain];
}
return tweetCell;
}
Существует соответствующий NIB для пользовательской ячейки (TwitterTweetTableCell), и, как отмечено в коде, Идентификатор для ячейки там установлен как 'tweetCell'.
Код работает нормально, за исключением того, что, согласно Инструментам, он пропускает ячейки: - (
Я полагаю, что я прав, возвращая ячейку с retainCount, равным 1 (это возврат от alloc и, в любом случае, если я этого не сделаю, то он вылетает с зомби). Как показывает код, я затем автоматически освобождаю его, прежде чем передать его контроллеру стола.
Мысли о том, почему это утечки будут оценены.