`

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

阅读更多
最近做的项目要用到相关功能,于是下下来研究了下。发现在学到不少东西,记录下来方便以后查阅:

1.多线程的使用
例子里ParseOperation类继承自NSOperation,当rss的url请求完成后,新生成一个线程放到线程队列里,来执行xml的解析工作,

这样不会影响主线程的一些后续操作,当解析完成后通知主线程,进行ui更新。

这里需要注意的是,iphone开发中,在主线程之外的线程更新主线程所显示的界面元素,不能直接调用主线程的类的更新界面的方法,否则界面看不到任何结果.而是需要有个缓冲,使

用performSelectorOnMainThread方法,在线程调用到更新界面那个类的时候,在更新界面前,通过如下调用:

[self performSelectorOnMainThread:@selector(updateLabel:) withObject:updateData waitUntilDone:YES];

上面假设你已经定义了一个- (void)updateLabel:(NSString *)txt{}的方法.在此方法中更新界面即可即时看到结果.



2.关于uitableviewcell的重用
因为我们创建UITableviewCell的时候是以重用的方式来创建,所以就相当于说第一屏显示的cell就是以后显示数据和图片的基础,因为后面数据超出一平的时候,我们只是改变数据的显示,并没有为每一个cell的数据元创建相应的一个UITableViewCell(这样非常的浪费内存),要是我们没有实现

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView和- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

代理的时候,当我们滚动UITableView的时候TableView 就是按照顺序来加载图片的信息资源,这样当我们用力滚动Table的时候就感觉相当的卡,(其实UITableView实在一个个的显示出cell的信息)当我们实现了以上代理的话,就可以实现在tableView滚动停止的时候,在去加载数据信息,这样滚动期间的tableViewCell就可以用默认的图片信息来显示了。

对于uitableviewcell浏览中出现数据行重复的问题,一般都是在if(cell==nil){}代码块里,对cell进行了一些赋值而产生的,尽量在代码块外面在进行cell赋值,这样问题就解决了。

3.有关线程间传值
在这两个线程之间传递对象时,一定要明确这个对象的所有者,如果使用的是共用同一块内存,需要考虑到对象的值变化后对彼此的影响。
如果只是单方面从一个线程传对象到另一线程,本线程不在使用这个对象,那么应该把释放相应指针,防止误操作对对象的影响。
分享到:
评论
1 楼 hotfm 2011-10-24  
学习了,不错。。。

相关推荐

    iPhone例子源代码 Code Sample : Lazy Table Images

    这是苹果apple的iphone官方例子,帮助你学习UITableView和显示RSS文本,异步方式加载图片...... 这个例子 分阶段地载入和显示一个UITableView. 一开始载入相关的RSS文本,使表格以最快速度显示出来,然后再异步方式...

    LazyTableImages 见解

    LazyTableImages 是苹果官方的tableview上添加images的demo,这个demo的功能主要为: 1、图片下载为异步传输 2、tableview在滑动过程中不会进行线程加载 3、在tableview滑动结束后,根据视图中出现的tableview的...

    LazyTableImages.zip_MacOS编程_Objective-C_

    一旦图片被下载,就存储到本地,下次需要时直接从缓存中读取,避免了重复的网络请求。NSCache或者第三方库如SDWebImage可以实现这一功能。 六、UIImageView的异步加载 在UITableView的单元格中,我们通常使用...

    iphone uitableview图片延迟加载实例(详细注释)

    一旦检测到,就调用网络请求或者从本地缓存中获取图片,然后设置到UIImageView上。 4. **缓存策略**:为了提高性能,我们会使用内存缓存和磁盘缓存。内存缓存可以快速响应,而磁盘缓存则用于长期存储。可以使用苹果...

    IPHONE下拉刷新列表代码

    当用户在列表顶部向下滑动时,如果该功能已启用,会显示一个指示器,通常是一个旋转的UIActivityIndicatorView或者一些动画,表示数据正在更新。一旦刷新完成,列表会自动滚动回顶部,显示最新的内容。 在iOS中,...

Global site tag (gtag.js) - Google Analytics