zoukankan      html  css  js  c++  java
  • iPhone程序中图片延时加载

    从网上加载图片,当网速慢或是图片较大时,你会发现程序可能会失去对用户的响应.这样你可以用多线程:

    -(void) buildData {  

        NSOperationQueue *queue = [NSOperationQueue new];  

          

        [queue setMaxConcurrentOperationCount:NSOperationQueueDefaultMaxConcurrentOperationCount];  

          

        NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self   

                                                                                selector:@selector(downloadImage)   

                                                                                  object:nil];  

        [queue addOperation:operation];  

        [operation release];  

    }  

     -(void) buildData {         NSOperationQueue *queue = [NSOperationQueue new];                  [queue setMaxConcurrentOperationCount:NSOperationQueueDefaultMaxConcurrentOperationCount];                  NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self                                                                                                                                                          selector:@selector(downloadImage)                                                                                                                                                            object:nil];         [queue addOperation:operation];         [operation release]; } 




    解决的方法是从网上down下来一次后就将图片缓存起来,再次显示的时候就不用去下载。
    假设有多张图片,用循环存多个路径:

    - (void)downloadImage {  
    1.     NSString *imagePath;  
    2.     for (...)  
    3.         imagePath = [GetImage saveImage:imageUrlPath withCache:@""];  
    4. }  
     - (void)downloadImage {         NSString *imagePath;         for (...)                 imagePath = [GetImage saveImage:imageUrlPath withCache:@""]; } 


    需要写GetImage类,实现刚才的方法.
    GetImage.h文件如下:

    #import <Foundation/Foundation.h>  

      

      

    @interface GetImage : NSObject {  

          

    }  

    +(NSString *) saveImage:(NSString *)urlpath withCache:(NSString *)filename;  

      

    @end  

     #import <Foundation/Foundation.h>   @interface GetImage : NSObject {          } +(NSString *) saveImage:(NSString *)urlpath withCache:(NSString *)filename;  @end 



    GetImage.m文件如下:

    @implementation GetImage
    +(NSString *) saveImage:(NSString *)urlpath withCache:(NSString *)filename
    {
        NSData *retureData=nil;
        NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSArray *cache = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *cachePath = [cache objectAtIndex:0] ;   
        filename=[filename stringByAppendingFormat:@"%@",[urlpath lastPathComponent]];
        NSString *filepath = [cachePath stringByAppendingString:@"/"];           
        filepath=[filepath stringByAppendingString:filename];
       
        NSLog(@"filepath=%@",filepath);
        BOOL success;
        success = [fileManager fileExistsAtPath:filepath];
        if (success)
        {
            return     filepath;
           
        }
        else
        {
            NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
            [request setURL:[NSURL URLWithString:urlpath]]; 
            [request setHTTPMethod:@"GET"]; 
           
            NSURLResponse *response;
            NSError *error;
           
            retureData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
           
            if ([fileManager createDirectoryAtPath:cachePath attributes:nil]==NO){
                ////NSLog(@"fileManager createDirectoryAtPath:cachePath attributes:nil");
            }
            if ([retureData writeToFile:filepath atomically:YES]){
                NSLog(@"save Image Success");
            }
            else
            {
                NSLog(@"save Image Fail");
            }
        }
       
        if (retureData !=nil && [fileManager fileExistsAtPath:filepath]){
           
            return     filepath;
        }
        [pool release];
       
        NSLog(@" Image return nil");
        return nil;
       
       
       
    }

    至此,存储完毕,在用的时候调用刚才存的路径就可以了,可用方法[[UIImage alloc] initWithContentsOfFile:imagePath]

  • 相关阅读:
    mobilebone.js使用笔记
    js笔记:匿名函数
    java中==和equals和hashcode的区别详解
    JVM基础学习之基本概念、可见性与同步
    面向对象-抽象类和接口解析
    maven使用deploy发布到本地仓库
    Jackson 时间格式化,时间注解 @JsonFormat 与 @DatetimeFormat 用法、时差问题说明
    cxf动态调用webservice设置超时,测试线程安全
    再谈API GateWay服务网关
    微服务实战-使用API Gateway
  • 原文地址:https://www.cnblogs.com/xiaonanxia/p/2729213.html
Copyright © 2011-2022 走看看