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

来源:互联网 发布:wifi软件哪个好用 知乎 编辑:程序博客网 时间:2024/05/29 11:00
最近做的项目要用到相关功能,于是下下来研究了下。发现在学到不少东西,记录下来方便以后查阅: 

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.有关线程间传值 
在这两个线程之间传递对象时,一定要明确这个对象的所有者,如果使用的是共用同一块内存,需要考虑到对象的值变化后对彼此的影响。 
如果只是单方面从一个线程传对象到另一线程,本线程不在使用这个对象,那么应该把释放相应指针,防止误操作对对象的影响。
原创粉丝点击