iOS table preview image release

∥☆過路亽.° 提交于 2019-12-12 03:36:02

问题


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:


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.



来源:https://stackoverflow.com/questions/14993545/ios-table-preview-image-release

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!