iOS边练边学--UITableView性能优化

一、cell的循环利用方式1:

 1 /**
 2  *  什么时候调用:每当有一个cell进入视野范围内就会调用
 3  */
 4 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 5 {
 6     // 0.重用标识
 7     // 被static修饰的局部变量:只会初始化一次,在整个程序运行过程中,只有一份内存
 8     static NSString *ID = @"cell";
 9
10     // 1.先根据cell的标识去缓存池中查找可循环利用的cell
11     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
12
13     // 2.如果cell为nil(缓存池找不到对应的cell)
14     if (cell == nil) {
15         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
16     }
17
18     // 3.覆盖数据
19     cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
20
21     return cell;
22 }

二、cell的循环利用方式2:--此方法的弊端是只能使用系统默认的样式

<1>定义一个全局变量

1 // 定义重用标识 2 NSString *ID = @"cell";

<2>注册某个标识对应的cell类型

1 // 在这个方法中注册cell
2 - (void)viewDidLoad {
3     [super viewDidLoad];
4
5     // 注册某个标识对应的cell类型
6     [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
7 }

<3>在数据源方法中返回cell

 1 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 2 {
 3     // 1.去缓存池中查找cell
 4     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
 5
 6     // 2.覆盖数据
 7     cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
 8
 9     return cell;
10 }

三、cell的循环利用方式3:

<1>在storyboard中设置UITableView的Dynamic Prototypes Cell

时间: 2024-11-06 13:22:39

iOS边练边学--UITableView性能优化的相关文章

iOS开发——项目实战总结&amp;UITableView性能优化与卡顿问题

UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积很多cell.如果重用cell,为cell创建一个ID 每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell 2.避免cell的重新布局 cell的布局填充等操作 比较耗时,一般创建时就布局好 如可以将cell单独放到一个自定义类,初始化时就布局好

iOS开发——实战项目总结&amp;UITableView性能优化技巧

UITableView性能优化技巧 Table view需要有很好的滚动性能,不然用户会在滚动过程中发现动画的瑕疵. 为了保证table view平滑滚动,确保你采取了以下的措施: 正确使用`reuseIdentifier`来重用cells 尽量使所有的view opaque,包括cell自身 避免渐变,图片缩放,后台选人 缓存行高 如果cell内现实的内容来自web,使用异步加载,缓存请求结果 使用`shadowPath`来画阴影 减少subviews的数量 尽量不适用`cellForRowA

iOS 8:【转】UITableView 性能优化笔记

源地址:http://fann.im/blog/2012/09/11/uitableview-optimization-notes/ Hacking Week 技术总结最后一篇,记一下 UITableView 性能优化需要注意和改进的地方. 网络图片异步加载,SDWebImage. 文字直接 drawInRect/drawAtPoint 绘制,参考 ABTableViewCell,AdvancedTableViewCells. 本地图片也可以直接绘制,或者用 CALayer 来添加显示. cel

IOS UITableView性能优化

1.关于UITableView性能的优化,很容易就让人想起UITableView的复用,那么除此之外呢?还有么有其他的方法能够优化用户的体验,或者说优化我们的设计的软件呢? 答案是:有! 一般我们在设计一款应用的时候,占用系统资源最多,应该就是图片的加载了吧,的确,一方面图片占用的内存大,而且数量多,通常我们需要开启多个线程去下载这些图片,但是这些图片当中,有些图片用户是并不关心的,如何加载用户喜欢的资源(图片),而不去加载那些用户不感兴趣的资源,就是今天的主题,这个问题的解决方法,其实说出来估

iOS开发UI篇—UITableviewcell的性能优化和缓存机制

iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource的 tableView:cellForRowAtIndexPath:方法来初始化每?行 UITableViewCell内部有个默认的子视图:contentView,contentView是UITableViewCell所显示内容的父视图,可显示一些辅助指示视图 辅助指示视图的作?是显示一个表示动作的

UITableView性能优化

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 这个代理方法的实现,在可见的页面是会重复绘制页面的,所以绝大部分人都会在这里做一些代码处理比如:static NSString *CellIdentifier = @"LazyTableCell";UITableViewCell *cell = [tableView dequeueR

iOS页面间跳转的性能优化(二)

续言 在页面间跳转的性能优化(一)中介绍了一些基础知识,讲述了情形一与情形二的优化方式及原理,但有许多人对情形二最后两种处理方式的原理表示不理解,不清楚处理过程,接下来会详细分步地讲述这两种方式的原理,如果你还没看过页面间跳转的性能优化(一),请先阅读. 点击下载Demo,或https://github.com/IOSDelpan/SmoothTransitionDemo. 页面间的跳转大致分为几个任务:1.生成将即显示的页面视图:2.生成我们所需要的UI元素:3.生成页面跳转的动画:而这几个任

iOS边练边学--CALayer,非根层隐式动画,钟表练习

一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘制,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示 UIView本身不具备显示的功能,是他内部的层才有显示功能 二.CALayer的基本使用 三.关于CALa

iOS边练边学--触摸事件以及能够拖拽的UIView的练习

一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此他们都是响应者对象,都能够接受并处理事件 UIResponder内部提供了以下方法来处理事件 三.练习中对UIView的触摸事件进行了熟悉 四.UITouch 一根手指对应一个UITou