TableView中用NSThread线程延时加载图片的例子

来源:互联网 发布:流星网络电视 编辑:程序博客网 时间:2024/05/16 08:31

现在- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  [NSThread detachNewThreadSelector:@selector(startImageread:) toTarget:self withObject:indexPath];

}
startImageread是获取照片的方法,我是从本地读取的



-(void)startImageread:(NSIndexPath *)indexPath
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    NSInteger row = [indexPath row];
    NSDictionary *imageNameDictionary = [self.DataArray objectAtIndex:[DataArray count]-row-1];
    
    NSString *readImageaname=[imageNameDictionary objectForKey:@"objectTimedata"];
    //NSLog(@"SaveData%@",imageNameDictionary);
    //NSLog(readImageaname);
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    if (!documentsDirectory) {
        NSLog(@"Documents directory not found!");
    }
    
    
    NSString *Data2File = [documentsDirectory stringByAppendingPathComponent:readImageaname];

    UIImage *newimage=[UIImage imageWithContentsOfFile:Data2File];//读取的图片
    //UIImage *newimage=[[UIImage alloc] initWithContentsOfFile:Data2File];
    //printf("startImageread****indexPath:%d/r/n",row);
    NSDictionary *cellimage = [NSDictionary dictionaryWithObjectsAndKeys:
    
                                   indexPath, @"indexPathdtat",
                                   newimage,@"image",
                                   nil];
    //[NSThread sleepForTimeInterval:3];//不能让线程睡否则太慢了
    
    [self performSelectorOnMainThread:@selector(_setOCellImage:) withObject:cellimage waitUntilDone:YES];
    [pool release];
}
_setOCellImage是缓存刷新cell的图像
这里需要传递两个参数一个是indexPath 一个是图片newimage但是performSelectorOnMainThread只能带一个参数
这个问题困扰我半天,于是我把indexPath和newimage放到一个数组NSDictionary *cellimage传过来的

-(void)_setOCellImage:( id )celldata
{
    UIImage *newimage=[celldata objectForKey:@"image"];//从参数celldata里面拿出来图片
       [self.DataTable cellForRowAtIndexPath:[celldata objectForKey:@"indexPathdtat"]].imageView.image=newimage;}