您可以简单地从您的服务器加载它们,但然后需要网络连接。加载它们异步从服务器,你可以使用此代码:如果你愿意,你也可以将图像保存到缓存目录(使用文件目录不建议,因为它会与Apples iOS Data Storage Guidelines碰撞)
dispatch_queue_t image_queue = dispatch_queue_create("com.company.app.imageQueue", NULL);
dispatch_queue_t main_queue = dispatch_get_main_queue();
dispatch_async(image_queue, ^{
NSString *URLString = @"http://example.com/images/19191919.png";
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLString];
UIImage *image = [UIImage imageWithData:imageData];
dispatch_async(main_queue, ^{
[imageView setImage:image];
});
});
和检查下载图像前的两倍,那么代码会是这样的:
NSString *fileName = @"19191919.png";
NSString *URLBaseString = @"http://example.com/images/";
NSString *URLString = [URLBaseString stringByAppendingString:fileName];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
NSString *dataPath = [cachePath stringByAppendingPathComponent:fileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:dataPath])
{
UIImage *image = [UIImage imageWithContentsOfFile:dataPath];
[imageView setImage:image];
}
else
{
dispatch_async(image_queue, ^{
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLString];
UIImage *image = [UIImage imageWithData:imageData];
[UIImagePNGRepresentation(image) writeToFile:dataPath atomically:YES];
dispatch_async(main_queue, ^{
[imageView setImage:image];
});
});
}
此代码尚未经过测试,但应该工作。请注意,我依靠ARC来管理内存。
来源
2012-05-09 09:27:36
dom
谢谢!但iPad将处于一个没有连接的地方。我们打算使用USB条形码扫描仪也是因为我们需要应用程序的速度很快,所以从服务器上下载图片现在不是一个选项.... thansk反正;) –