2013-02-21 3 views
0

Я тестирую RSS на своем iPhone. Он использует 0 файлов nib. Я постараюсь описать это как можно лучше и отправлю код, если это необходимо, но я ставлю его общим явлением с общим решением. Проблема заключается в контроллере tableview, и решение, вероятно, должно быть реализовано в методе CellForRowAtIndexPath. Если я прокручу вниз, изображения предварительного просмотра остаются в их соответствующих местах, пока асинхронная очередь не загрузит правильное изображение для этой ячейки. Поэтому, если у меня есть изображение для элемента массива 1, и я прокручиваю вниз до элемента массива 20, изображение для элемента массива 1 будет по-прежнему находиться до тех пор, пока моя очередь не поймает и не загрузит это изображение. Как я могу освободить изображения из ячеек, которые я не просматриваю? Спасибо за ваше время.iOS table preview image release

Вот мой 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; 
} 

Если вы собираете, у меня есть класс ArticleItem который вытягивает URLS изображения и превращает их в данные, и у меня есть класс CustomCell, который делает то, что его называют. CustomCell.h @interface CustomCell: UITableViewCell { UIImageView * myImageView; } @property (неатомный, сильный) 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

Вы можете показать нам свои коды? – Raptor

+0

Спасибо, я добавил свой CellForRow ... – Morkrom

ответ

1

Реализовать подкласс UITableViewCell, сделать свойство для ImageView. Как только он уйдет от видимости, он будет выпущен. Описывая только обзор, так как вам может потребоваться увидеть использование при прокрутке.

+0

Итак, у меня есть класс ArticleItem, который находит и определяет данные для изображений, и класс CustomCell UITableViewCell для форматирования моих ячеек уже на месте. Должен ли я каким-либо образом реализовать данные изображения в уже существующем классе UITableViewCell? – Morkrom

+0

Посетите этот учебник, они создали собственное изображение для камеры: http://www.appcoda.com/customize-table-view-cells-for-uitableview/ - создавая thumbnailImageView как сильное свойство (они сделали его слабым там) - вы убедитесь, что как только ячейка исчезнет из вида, она будет выпущена. Убедитесь, что в viewdidunload для пользовательских наборов классов ячеек thumbnailImageView = nil. –

+0

Я сделал то, о чем вы упоминали, в том числе: сделать мое свойство imageview сильным и создать метод viewDidUnload для пользовательского класса ячеек. Проблема сохраняется, поэтому я отправлю код из своего пользовательского класса ячеек. – Morkrom