0
votes

I'm testing an RSS on my iPhone. It uses 0 nib files. I'll try to describe it as best as I can, and will post code if its required, but I bet its a common phenomena with a common solution. The issue is in a tableviewcontroller, and the solution probably needs to be implemented in the CellForRowAtIndexPath method. If I scroll down, preview images stay in their respective spots until the async queue loads the correct image for that cell. So if I have an image for array item 1, and I scroll down to array item 20, the image for array item 1 will still be there until my queue catches up and loads that image. How can I release the images from cells that I am not viewing? Thank you for your time.

Here is my CellForRow...

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier];
}
ArticleItem *object = _objects[indexPath.row];
cell.primaryLabel.text = object.title;
cell.secondaryLabel.text = object.strippedDescription;
cell.primaryLabel.lineBreakMode = NSLineBreakByWordWrapping;
    cell.primaryLabel.numberOfLines = 0;
    cell.primaryLabel.lineBreakMode = NSLineBreakByWordWrapping;
    cell.secondaryLabel.numberOfLines = 0;

//Async dispatch queue for image preview loading...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{ 

    UIImage *preview = nil;
    if (object.iG = nil)
    {
        preview = [UIImage imageNamed:@"CellLogo.png"];
    }
    else
    {
        preview = [UIImage imageWithData:object.iG];
    } 
    dispatch_sync(dispatch_get_main_queue(), ^{

        [[cell myImageView] setImage:preview];
        [cell setNeedsLayout];
    });
});
return cell;   
}

If you gather, I have an ArticleItem class which pulls the image URLS and turns them into data , and I have a CustomCell class which does what its called. CustomCell.h @interface CustomCell : UITableViewCell { UIImageView *myImageView; } @property(nonatomic,strong)UIImageView *myImageView; @end ===================================================== CustomCell.m

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
    // Initialization code
            myImageView = [[UIImageView alloc]init];


    [self.contentView addSubview:myImageView];       
}
return self;
}
-(void)viewDidUnload {
myImageView = nil;
primaryLabel = nil;
secondaryLabel = nil;
}
1
can you show us your codes ? - Raptor
Thank you, I have added my CellForRow... - Morkrom

1 Answers

1
votes

Implement a subclass of UITableViewcell, make a property for imageview. As soon as it gets away from visibility, it will be released. Describing just the overview as you may yourself need to see the usage upon scrolling.