LazyTableImages范例解析

原创 2011年10月19日 16:38:28

近来想了解iPhone的多线程处理,查阅到了官方范例LazyTableImages,发现代码中有不仅有多线程处理,还有XML解析和异步下载图片,感觉官方例子真是全面啊,便花了时间好好研究下。
LazyTableImages地址:

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html


一、程序的运行效果

二、程序的思路
多线程的好处即提高程序执行效率,防止界面阻塞。
1、进入程序后,建立给定网址(RSS feed)的连接,程序会自动下载对应的RSS feed数据,如果网络连接无误,数据自动全部下载,这是XCode提供的内部回调函数。
2、建立一个线程,把下载好的数据传递给新建线程,把此线程添加到线程队列,利用XCode的delegate等待线程结束后返回被处理后的数据。
3、在创建的线程中用NSXMLParser根据程序要求分析下载的数据,并添加到数组中。全部解析之后,通知AppDelegate
4、程序AppDelegate接到解析成功通知后,根据解析好的数组,执行performSelectorOnMainThread(否则界面控件无变化)更新程序UI界面
5、主界面rootViewController的table view根据解析的数组重新载入,根据传递进来的数组更新每个单元格
6、如果单元格中的图片没有数据而只有网址,根据此单元格针对的图片,创建对应的下载对象IconDownloader,同时把此对象和行描述添加到字典imageDownloadsInProgress(以备检测是否重复下载)中,并开始下载
7、下载对象下载完图片后,通知Table view更新对应的table cell
8、界面完成


注:
1、网络连接状态检测(程序中处理比较简单)
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:TopPaidAppsFeed]];
self.appListFeedConnection = [[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self] autorelease];
NSAssert(self.appListFeedConnection != nil, @"Failure to create URL connection.");
2、子线程中处理的数据,更新到主界面界面的控件需要执行
[self performSelectorOnMainThread:@selector(handleLoadedApps:) withObject:appList waitUntilDone:NO];
3、每次只下载一屏显示的单元格图片
- (void)loadImagesForOnscreenRows
{
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
}
4、拖动或滚动table view时,图片不下载
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
5、有按给定尺寸处理图片的代码
UIImage *image = [[UIImage alloc] initWithData:self.activeDownload];
if (image.size.width != kAppIconHeight && image.size.height != kAppIconHeight)
{
CGSize itemSize = CGSizeMake(kAppIconHeight, kAppIconHeight); UIGraphicsBeginImageContext(itemSize);
CGRect imageRect = CGRectMake(0.0, 0.0, itemSize.width, itemSize.height);
[image drawInRect:imageRect];
self.appRecord.appIcon = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
6、注意内存释放和错误处理
7、变量所有权变更以后,即两个程序中共享对象,要及时的释放
ParseOperation *parser = [[ParseOperation alloc] initWithData:appListData delegate:self];
self.appListData = nil;


三、结束语
好的程序,需要一步步跟,理清程序的思路,解析每一步骤。

 

多线程学习---解析苹果官网代码《LazyTableImages》

很早以前就看过《LazyTableImages》的代码,当时只是大致看了一下它的原理,没有很详细的研读。最近在看第三方开源框架的代码,学习优化策略以及优雅的代码风格,提高自身水平,希望与大家一起学习和...
  • jasonjwl
  • jasonjwl
  • 2016-03-27 21:33:00
  • 795

iOS学习--从lazyTableImages官方例子学到的一些东西

最近做的项目要用到相关功能,于是下下来研究了下。发现在学到不少东西,记录下来方便以后查阅:  1.多线程的使用  例子里ParseOperation类继承自NSOperation,当rss的u...
  • yanfangjin
  • yanfangjin
  • 2012-07-23 08:45:44
  • 3078

apple官方例子学习记录之LazyTableImages

LazyTableImages是apple官方例子一个图片延迟加载的典型示例,本文简单记录该例子中的几个重点和一些心得。        1)为了增强tableview的滑动性能,采用了图片延迟加载的...
  • numbbuaa
  • numbbuaa
  • 2013-04-16 17:35:51
  • 1291

LazyTableImages范例解析

近来想了解iPhone的多线程处理,查阅到了官方范例LazyTableImages,发现代码中有不仅有多线程处理,还有XML解析和异步下载图片,感觉官方例子真是全面啊,便花了时间好好研究下。 Laz...
  • iseekinger
  • iseekinger
  • 2011-10-19 16:38:28
  • 7820

<em>LazyTableImages</em> 见解

<em>LazyTableImages</em> 是苹果官方的tableview上添加images的demo,这个demo的功能主要为: 1、图片下载为异步传输 2、tableview在滑动过程中不会进行线程加载 3、在table...
  • 2018年04月09日 00:00

LazyTableImages 见解

  • 2014年08月29日 15:12
  • 503KB
  • 下载

MHLazyTableImages异步下载图片

主要是用到了第三方的类库:MHLazyTableImages,图片下载的逻辑由MHLazyTableImages和MHImageCache类来处理,TableViewController只创建一个MH...
  • dexin5195
  • dexin5195
  • 2014-07-03 11:21:10
  • 610

iOS 开发——登录页面动画、转场动画

DEMO下载地址:https://github.com/YYProgrammer/YYLoginTranslationDemo 技术点分析 ...
  • u010960265
  • u010960265
  • 2018-01-06 13:24:37
  • 98

从lazyTableImages官方例子学到的一些东西

最近做的项目要用到相关功能,于是下下来研究了下。发现在学到不少东西,记录下来方便以后查阅:1.多线程的使用例子里ParseOperation类继承自NSOperation,当rss的url请求完成后,...
  • bl1988530
  • bl1988530
  • 2011-07-13 23:02:15
  • 1829

Visual C# 2005范例精要解析

  • 2009年04月12日 11:09
  • 4.03MB
  • 下载
收藏助手
不良信息举报
您举报文章:LazyTableImages范例解析
举报原因:
原因补充:

(最多只允许输入30个字)