首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UITableView性能优化-中级篇

老实说,UITableView性能优化 这个话题,最经常遇到的还是在面试中,常见的回答例如: Cell复用机制 Cell高度预先计算 缓存Cell高度 圆角切割 等等. . ....进阶篇 最近遇到一个需求,对tableView有中级优化需求 要求 tableView 滚动的时候,滚动到哪行,哪行的图片才加载并显示,滚动过程中图片不加载显示; 页面跳转的时候,取消当前页面的图片加载请求...; 以最常见的cell加载webImage为例: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath...runloopDemo.gif 效果如上 滚动的时候不加载图片,滚动结束加载图片-满足 滚动结束,之前滚动过程中的cell会加载图片 => 不满足需求 版本回滚到Runloop之前 - git reset...页面跳转的时候,取消当前页面的图片加载请求; - (void)p_loadImgeWithIndexPath:(NSIndexPath *)indexPath{ DemoModel *

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

优雅的处理网络数据,你真的会吗?不如看看这篇.

正如大多数 iOS 开发人员所知,显示滚动数据是构建移动应用中常见的任务,Apple 的 SDK 提供了 UITableView 和 UICollectionVIew 这俩大组件来帮助执行这样的任务。...正常情况下,我们在构建 UITableView 这个控件的时候,需要对它的行数(numsOfRow)做一个初始化,这个行数对我们实现无限加载和无缝加载是一个很关键的因素,假设我们每次根据服务端返回的数据量去更新...Prefetch 和 CancelPrefetch 操作的: image 好了,到这里我就简单的实现了 UITableView 无限滚动和对数据无缝加载的效果,你学会了吗?...如何避免滚动时的卡顿 当你遇到滚动卡顿的应用程序时,通常是由于任务长时间运行阻碍了 UI 在主线程上的更新,想让主线程有空来响应这类更新事件,第一步就是要将消耗时间的任务交给子线程去执行,避免在获取数据时阻塞主线程...别急,听我娓娓道来,这里我再给大家一个小建议,大家都知道 UITableView 实例化 Cell 的方法是:tableView:cellForRowAtIndexPath: ,相信很多人都会在这个方法里面去进行数据绑定然后更新

1.3K20

使用 Vim 的 jump list 看代码

每个位置(position)(position 包括了文件名,列号,行号)会被一个 jump list (跳转表)中,每个窗口(window)都有一个单独的 jump list,它可以记录最近 100...像搜索(search), 替换(substitue)和标记(mark)的命令都被认为是一个“jump”(跳转),但是在一个文件中进行滚动并不是一个 jump. 详见 :h jump-motions....如何使用 使用 :jumps 来显示当前窗口的 jump list,由于太长,下图并未显示完,使用 Vim 的常见快捷键进行滚动,j,k,G 等等: ?...jumps 使用 Ctrl-o 跳转到上一个位置,Ctrl-i 跳转到下一个位置。Ctrl-o 和 Ctrl-i 前面也可以加上编号,进行精确跳转,这个编号就是上图中 jump 列的数字。...跳转以后再查看 jump list, 你会发现有个 > 指示了当前位置,一开始的时候它是在 jump list 的顶部,如果你的 jump list 比较长的话,可能需要拖到底部(快捷键 G)才能看到:

1.1K20

UITableViewCell系列之(二)视觉差滚动效果前言

如下是我所要说的视觉差滚动效果(即:滚动tableView时候,每一行的图片都会根据滚动方向和滚动距离的不同进行移动,给人一种图片在移动的视觉体验),由于下面gif图失真卡顿严重,真实效果大家可以参考demo...用于tableView滚动时,更新imageView的Y坐标值 在UIScrollViewDelegate的scrollViewDidScroll:方法里调用cell的对象方法,更新imageView的...Y坐标值 注意事项: 1. cell的imageView的上、下边距要超出cell,不然tableView滚动的时候没有多余的部分显示。...控制器不能使UITableViewController,只能是UIViewController的view上添加一个UITableView ---- 3. demo中涉及到了坐标系转换的问题,不了解坐标系转换的可以参考如下两个方法的使用...[A convertRect:frame1 fromView:B]; 主要代码如下: 1. cell.m文件中 - (void)updateBackImageViewYForTableView:(UITableView

6.1K30

UITableView性能提升和优化(第

// Customize the appearance of table view cells. - (UITableViewCell *)tableView:(UITableView *)tableView...return cell; } 代码更新之后,你再运行一下测试。从表格3-4来看,你得到了一个更好的结果。现在的平均运行时间是0.002,fps的性能现在接近60。...如果你的apps能够达到这个水平,你不必再担心滚动时的性能了;它非常的流畅。通常,对于一个正常的,简单的里面包含很多subviews的UITableView来说,这已经是一个非常好的性能了。...当OS需要为TableView渲染一个新的cell,会通过调用下面的方法来返回一个新的cell: - (UITableViewCell *)tableView:(UITableView *)tableViewcellForRowAtIndexPath...这就是为什么用户看到在某个地方滚动停止的原因。 为了使这个过程尽可能的快,你可以去除一些逻辑,延迟计算,通过重用来缓存数据和图片。另外一个方法是通过首先使用默认的图片和数据来重用cell。

64420

【IOS开发基础系列】Table View开发专题

做到前几点后,你的table view滚动时应该足够流畅了,不过你仍可能让用户感到不爽。常见的现象就是在更新数据时,整个界面卡住不动,完全不响应用户请求。...例如每次载入50条信息,那就可以在滚动到倒数第10条以内时,加载更多信息: - (void) tableView: (UITableView *)tableView willDisplayCell: (...YES;         [self update];     } } // update方法获取到结果后,设置updating为NO 还有一点要注意的就是当图片下载完成后,如果cell是可见的,还需要更新图像...//www.keakon.net/2011/07/26/利用预渲染加速iOS设备的图像显示 优化UITableView滚动性能 http://blog.csdn.net/chaoyuan899/article.../article/details/18262565 UITableVIew滚动流畅性优化 http://blog.csdn.net/enuola/article/details/41942963 uitableview

27520

【IOS开发基础系列】UICollectionView专题

1.6 UICollectionViewLayout         这是UICollectionView和UITableView最大的不同。...需要注意根据滚动方向不同,header和footer的高和宽中只有一个会起作用。垂直滚动时section间宽度为该尺寸的高,而水平滚动时为宽度起作用,如图。     ...collectionViewHeight = (_myCellVMArray.count + 2)/3 * kMyInfoCollectionCellHeight + 10;     //确定是水平滚动...UICollectionViewCell重用         UICollectionViewCell其实只实例化了能应付一屏显示范围的对象实例,而在cellForItemAtIndexPath方法中重复更新此实例的业务数据来达到显示不同...而对于业务数据的绑定与页面控件更新逻辑,笔者建议在对应业务对象的Set方法中实现,例如上面的HJInfoCellVM业务对象,就在其Set方法中实现就可以了,示例如下: - (void)setInfoVM

34330

手把手带你撸一个网易云音乐首页(三)

在我们实际开发过程中,数据请求的操作必不可少,必须要先将数据提供给 ViewModel,然后在数据更新时重新 Reload TableView。...关于 headView 的实现方式,想必使用过 UITableView 的同学都不会陌生,可以通过下面的方法来实现: - (nullable UIView *)tableView:(UITableView...0 每次滚动停止都会调用上述的函数 func targetContentOffset(...), 在这个函数中有一个参数 proposedContentOffset 记录了滚动的目标位移坐标,通过这个坐标和记录的上次滚动的坐标可以判断出是向左滚动还是向右滚动...所以我们需要实现 UISearchBarDelegate 代理函数: extension DiscoveryViewController: UISearchBarDelegate { // 点击跳转...pushViewController(self.musicSearchController, animated: false) return true } } 构建跳转后的搜索页面

2.2K10
领券