在UITableViewCell中保存图像

时间:2011-02-18 17:52:42

标签: iphone objective-c ios uitableview

我从tableviewcell中的API加载图像,每次向下滚动UITableView时都会下载图像。那么保存此图像的最佳方法是什么,因此如果图像已经存在,则无需再次下载图像?

同样的文字,如何保存文字...

2 个答案:

答案 0 :(得分:2)

如果它不是很大,您可以下载一次并将其保存到用户首选项(NSUserDefaults)作为NSData对象。适合我。

或者,您可以使用NSUrlConnection的异步请求,并以您喜欢的任何方式实现缓存。 (例如,每周只更新一次图像。)
此外,即使NSUrlConnection的默认缓存设置也可能足够好 More on caching

修改
异步请求的一个例子。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: url]];
URLConnectionDelegate *delegate = ...;

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                            delegate:delegate];

if (!connection) {
  // something went wrong
}

在委托中,您主要需要处理接收数据和完成连接的方法 假设你有NSMutableData *receivedData个对象。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
  // success, do whatever you want with data

  [receivedData release];
  [connection release];
}

上面的链接和API documentation提供了有关委托结构的更多详细信息。

答案 1 :(得分:2)

查看iOS站点示例代码部分中的LazyTableImages示例应用程序。它有一个很好的例子,说明如何使用NSUrlConnection异步调用下载表格单元格的图像,并将图像(和文本)存储在NSMutableArray中。

  

此示例演示了一个多阶段   加载和显示的方法   UITableView的。它首先加载   来自RSS feed的相关文本所以   表可以尽快加载,   然后下载每个图像   异步行,所以UI更多   响应。