2013-03-07 3 views
2

Я загрузка изображения в Tableview, каждую функцию времениКак сделать многопоточность для загрузки изображения быстрее в tableView?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

выполняется, разные URL изображения придут ..

Моей проблема его занимает так много времени, чтобы загрузить изображение ..

Мой код ..

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    self.tableView1 = tableView; 
    static NSString *simpleTableIdentifier = @"SimpleTableCell"; 
    SimpleTableCell *cell = (SimpleTableCell *)[tableView1 dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
if (cell == nil) 
{ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil]; 
    cell = [nib objectAtIndex:0]; 
} 

    cell.nameLabel.text = title; 

    NSString *imageURL = [NSString stringWithFormat: @"http://www.xyz.com/image1.png]; 

    cell.thumbnailImageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:fullURL]]]; 
} 
return cell; 
} 

каждый раз, когда URL изображения будет меняться, и это займет время, чтобы загрузить каждое изображение ..

Может ли кто-нибудь предложить любую идею для решения этой проблемы? как многопоточность будет работать с этим кодом? где и что я должен редактировать в коде?

+1

https://github.com/rs/SDWebImage – janusbalatbat

ответ

3

Вы должны загрузить изображение в фоновом режиме, как:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *simpleTableIdentifier = @"SimpleTableCell"; 
    SimpleTableCell *cell = (SimpleTableCell *)[tableView1 dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
     dispatch_async(queue, ^{ 

      NSString *u=[NSString stringWithContentsOfFile:r.url encoding:NSUTF8StringEncoding error:nil]; 
      NSURL *imageURL=[NSURL URLWithString:u]; 
      NSData *imageData=[NSData dataWithContentsOfURL:imageURL]; 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       SimpleTableCell *cell = (SimpleTableCell *)[tableView cellForRowAtIndexPath:indexPath]; 
       cell.thumbnailImageView.image=[UIImage imageWithData:imageData]; 
       [cell setNeedsLayout]; 

      }); 
     }); 

    } 

    return cell; 
} 

Просто используйте выше код в методе просмотра таблицы с требуемым редактированием это должно работать для вас.

+0

привет спасибо .. я хочу знать, что r.url здесь .. а не им загружая URL-адрес из любого файла .. эти url r dynamic и im обращаются к нему из сети. – Raju

+0

@Raju: Фактически в моем приложении я показывал URL-адрес в ячейке. Вы не обязаны это делать. Я отредактировал свой ответ. Он работает для изображения? –

+0

спасибо, что получил решение. – Raju

0

Альтернатива ответа Джереми, который я использовал, прежде чем это HJCache рамки

Можно просто использовать объект HJManagedImage, она будет загружать и кэшировать изображения асинхронны для вас

1

Вам не нужно много поточности , По крайней мере, вам не нужно это делать самостоятельно.

Посмотрите на этот учебник. Это было очень полезно для меня, когда я начал с Apps. http://www.markj.net/iphone-asynchronous-table-image/

Альтернативно подкласс UIImageView и сделать это: http://codeshape.wordpress.com/2011/05/10/creating-a-lazy-loading-uiimageview-for-ios/

Смежные вопросы