NSURL转NSData转UIImage

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        
            NSString *fileURL = [NSString stringWithFormat:@"http://%@/image/%@/show.jpg?n=%d", 1,1];
            NSData *dateImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
            
            dispatch_sync(dispatch_get_main_queue(), ^{
                m_imgViewVideo.image = [UIImage imageWithData:dateImg];
                
                if (![ABServices bIsPreview])
                {
                    m_nPreviewCount = 0;
                }
            });
[pool drain];

dispatch_sync:提交块对象给指定的调剂队列,同步履行。
dispatch_async:提交块对象给指定的调剂队列,异步履行。

dispatch_async() 调用以后立即返回,dispatch_sync() 调用以后等到block执行完以后才返回,dispatch_sync()会阻塞当前线程。


//访问图片时响应404的没获取到数据时,判断code,0为ok
NSString *strURL = [NSString stringWithFormat:kUrlReadCameraAlarmInfo,[ABServices currentUserName],strSubClass];
                NSError *error = nil;
                NSData *dataImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL] options:NSDataReadingMappedIfSafe error:&error];
                if ([error code] == 0)
                {
                    //截取图片压缩
                    UIImage *imgCompress = [self image:[UIImage imageWithData:dataImg] centerInSize:CGSizeMake(140, 140)];
                    NSData *dataCompress = UIImageJPEGRepresentation(imgCompress, 1.0);
                   
                    [self saveImage:dataCompress nIndex:indexPath.row picName:strSubClass];
                }

以下是在tableview中全部代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"cate_cell";
    
    CateTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (cell == nil)
    {
        cell = [[[CateTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                     reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    //cell默认图片
    UIImageView *imgDefault = [[UIImageView alloc] init];
    imgDefault.image = [self image:[UIImage imageNamed:@"alarm_icon.png"] centerInSize:CGSizeMake(140, 140)];
    
    //获取每条报警记录
    NSDictionary *cate = [m_mutArrAlarmPicList objectAtIndex:indexPath.row];
    NSString *strImgPath = [NSString stringWithFormat:@"%@_0.jpg",[cate objectForKey:@"alarmPic"]];
    
    //搜索缓存
    UIImage *image = [self searchCacheImg:strImgPath nCellIndexPath:indexPath.row];
    if(image != nil)
    {
        imgDefault.image = image;
    }
    else
    {
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            
            NSString *strURL = [NSString stringWithFormat:kUrlReadCameraAlarmInfo,[ABServices currentUserName],strImgPath];
            NSError *error = nil;
            NSData *dataImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL] options:NSDataReadingMappedIfSafe error:&error];
            if ([error code] == 0)
            {
                //截取图片压缩
                UIImage *imgCompress = [self image:[UIImage imageWithData:dataImg] centerInSize:CGSizeMake(140, 140)];
                NSData *dataCompress = UIImageJPEGRepresentation(imgCompress, 1.0);
                
                [self saveImage:dataCompress nIndex:indexPath.row picName:strImgPath];
                dispatch_sync(dispatch_get_main_queue(), ^{
                    imgDefault.image = [UIImage imageWithData:dataCompress];
                    NSArray *arrRows = [NSArray arrayWithObjects:indexPath, nil];
                    [_tableView reloadRowsAtIndexPaths:arrRows withRowAnimation:UITableViewRowAnimationNone];
                });
            }
            
        });
    }
    cell.logo.image = imgDefault.image;
    [imgDefault release];
    cell.title.text = [self stringFormatDate:[cate objectForKey:@"alarmPic"]];
    
    cell.subTtile.text = [NSString stringWithFormat:@"%@",[cate objectForKey:@"alarmSensor"]];
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    
    SubCateViewController *subVc = [[[SubCateViewController alloc]
                                     initWithNibName:NSStringFromClass([SubCateViewController class])
                                     bundle:nil] autorelease];
    NSDictionary *cate = [m_mutArrAlarmPicList objectAtIndex:indexPath.row];
    subVc.m_nIndexPathRow = indexPath.row;
    
    //保存选中cell索引
    m_nSelectedCellIndex = indexPath.row;
    
    NSMutableArray *mutArrPics = [[NSMutableArray alloc] init];
    for (int i=0; i < 10; i++)
    {
        NSString *strSubClass = [NSString stringWithFormat:@"%@_%d.jpg",[cate objectForKey:@"alarmPic"],i];
        [mutArrPics addObject:strSubClass];
        dispatch_async(dispatch_get_global_queue(0, 0), ^{
            //搜索图片是否存在
            UIImage *image = [self searchCacheImg:strSubClass nCellIndexPath:indexPath.row];
            if(image == nil)
            {
                NSString *strURL = [NSString stringWithFormat:kUrlReadCameraAlarmInfo,[ABServices currentUserName],strSubClass];
                NSError *error = nil;
                NSData *dataImg = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL] options:NSDataReadingMappedIfSafe error:&error];
                if ([error code] == 0)
                {
                    //截取图片压缩
                    UIImage *imgCompress = [self image:[UIImage imageWithData:dataImg] centerInSize:CGSizeMake(140, 140)];
                    NSData *dataCompress = UIImageJPEGRepresentation(imgCompress, 1.0);
                    
                    [self saveImage:dataCompress nIndex:indexPath.row picName:strSubClass];
                }
            }
        });
    }
    
    
    subVc.subCates = mutArrPics;
    [mutArrPics release];
    //    self.currentCate = cate;
    subVc.cateVC = self;
    
    self.tableView.scrollEnabled = NO;
    UIFolderTableView *folderTableView = (UIFolderTableView *)tableView;
    [folderTableView openFolderAtIndexPath:indexPath WithContentView:subVc.view
                                 openBlock:^(UIView *subClassView, CFTimeInterval duration, CAMediaTimingFunction *timingFunction){
                                     // opening actions
                                 }
                                closeBlock:^(UIView *subClassView, CFTimeInterval duration, CAMediaTimingFunction *timingFunction){
                                    // closing actions
                                }
                           completionBlock:^{
                               // completed actions
                               self.tableView.scrollEnabled = YES;
                           }];
    
}

猜你喜欢

转载自zcw-java.iteye.com/blog/1896978