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];
}



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

- (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


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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值