Kështu që unë kam një nënklasë UITableViewCell të quajtur MCProductCell, e cila ngarkohet nga një NIB. Problemi është se kur lirohet tabela, metoda dealloc e qelizës sime të personalizuar nuk thirret as edhe një herë.
Këtu është një shembull i kodit:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"MCProductCellIdentifier";
MCProductCell *cell = (MCProductCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// Boolean value needed to determine if it is a reused cell or not. If it's not reused we have
// to start the thread that loads the image. For reused cells, that thread is started at the
// end of the scrolling
BOOL recycled = YES;
if (cell == nil) {
NSLog(@"cell alloc");
recycled = NO;
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MCProductCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
MCProduct *product = [products objectAtIndex:indexPath.row];
cell.product = product;
cell.cartViewController = self;
cell.productImage = product.cachedThumbnailImage;
if (product.cachedThumbnailImage == nil) {
cell.productImage = [ViewControllerUtils getDefaultImage];
if (!recycled)
[NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:cell withObject:cell.product.imageThumbnailUrl];
}
return cell;
}
Dhe për disa arsye, kur prezantoj për herë të parë UIViewController tim, që përmban tabelën, metoda dealloc e qelizës sime të personalizuar quhet ONCE. Problemi është se në metodën dealloc dua të heq qelizën si vëzhgues dhe nëse nuk thirret, atëherë qeliza nuk hiqet si vëzhgues. Gjithashtu pamja e tavolinës është një prizë.