问题

有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0。用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上。
这个过程中,cellForRow 被调用了几次呢?

手写 demo

新建一个工程,只有一个 tableView,然后从上滚到下。在 cellForRowAtIndexPath方法中把 row 加到数组中,然后滚动停止后,把数组写到文件中。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kReuseID];
cell.textLabel.text = [NSString stringWithFormat:@"%@",self.datas[indexPath.row]];
NSLog(@"cell for %@",indexPath);
[self.displayedCells addObject:@(indexPath.row)];

分析文件

import numpy as np
import json
import pandas as pd a = [] with open('displayedCell.txt', 'r') as f:
a = json.load(f) array = np.array(a) diff = array[1:] - array[:-1] s1 = pd.Series(array)
s2 = pd.Series(diff)
dataFrame = pd.DataFrame([s1, s2]).T
print(dataFrame)

如上,使用 numpypandas 来分析。最终的结果如下:

从第一个 cell 到最后一个 cell,最后的 cell 的 indexPath 是 999,但是 cellForRow 只被调用了 718 次。有一些是有间隔的。

猜想

UITableview在滚动时,会定时重绘,根据重绘前后滚动的位置来决定绘制哪些cell。
比如时刻1,显示下标为 10-20的cell,那么会为这些cell调用 cellForRow 方法。
时刻2,由于滚动太快,显示下标为 25-35的cell,那么为这些cell调用cellForRow 方法。中间的 21-24 就没有被调用。

参考

快速滑动时 `cellForRow` 的调用次数的更多相关文章

  1. Fresco对Listview等快速滑动时停止加载

    Fresco中在listview之类的快速滑动时停止加载,滑动停止后恢复加载: 1.设置图片请求是否开启 // 暂停图片请求 public static void imagePause() { Fre ...

  2. 小程序 onReachBottom 事件快速滑动时不触发的bug

    一般在列表页面 会先加载一定数量的数据 触发上拉加载这个动作的时候再陆续加载数据 假如上拉一次加载10条数据 在小程序中 你快速滑动页面触发加载这个事件的话 你会发现小程序卡着不动了 刚开始以为数据加 ...

  3. Android RecyclerView使用 及 滑动时加载图片优化方案

    1.控制线程数量 + 数据分页加载2.重写onScrollStateChanged方法 这个我们后面再谈,下面先来看看RecyclerView控件的使用及我们为什么选择使用它 RecyclerView ...

  4. 小程序swiper 快速滑动闪屏

    bindchange: function(e){ if(e.detail.source == "touch") { this.setData({ current: current ...

  5. $ListView的优化机制和滑动时数据错乱的讨论

    Refer:http://www.myexception.cn/mobile/1612364.html (一)Android ListView的基本用法 1.创建一个实体类Person,为其添加Get ...

  6. 使用Style自定义ListView快速滑动图标

    一.显示ListView快速滑动块图标 设想这样一个场景,当ListView的内容有大于100页的情况下,如果想滑动到第80页,用手指滑动到指定位置,无疑是一件很费时的事情,如果想快速滑动到指定的位置 ...

  7. ios 中如何应对UIScrollView快速滑动(暴力用户,暴力测试)

    1.实现UIScrollViewDelegate 开始滑动: - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView 滑动 ...

  8. [置顶] android ListView包含Checkbox滑动时状态改变

    题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...

  9. SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析

    前阵子遇到一个很是棘手的问题,监控系统DPA发现某个自定义标量函数被调用的次数非常高,高到一个离谱的程度.然后在Troubleshooting这个问题的时候,确实遇到了一些问题让我很是纠结,下文是解决 ...

随机推荐

  1. const当做标记的函数重载,但是仅仅是限于类里面的成员函数

    (1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,cha ...

  2. 2018.08.21 NOIP模拟 xorand(01trie)

    xorand 描述 有q次操作,每次操作是以下两种: 1. 加入一个数到集合中 2. 查询,查询当前数字与集合中的数字的最大异或值,最大and值,最大or值 输入 第一行1个正整数Q表示操作次数 接下 ...

  3. Django-组件

    https://www.cnblogs.com/yuanchenqi/articles/8034442.html

  4. time & datetime 模块

    在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍. 在开始之前,首先要说明几点: 一 ...

  5. python操作数据库-数据表

    数据表: 数据类型: 帮助的三种形式: 在cmd中输入: help 要帮助的主题词,或 ? 要帮助的主题词 或  \h 要帮助的主题词 . 数据表的创建: CREATE database IF NOT ...

  6. IntelliJ IDEA 2017版 SpringBoot的web项目补充

    一.注解        @SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置.        @Configuration:这是一个配置Sprin ...

  7. Cadence丢失了csdCommon.dll

    http://bbs.elecfans.com/jishu_450237_1_1.html

  8. (矩阵快速幂) Fibonacci -- poj -- 3070

    链接: http://poj.org/problem?id=3070   Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  9. 图形与游戏中3D数学基础的说明

    1.左手坐标系与右手坐标系没有好坏之分,不同的研究领域和不同的背景下,选择不同的坐标系:传统计算机图形学采用“左手坐标系”,线性代数则倾向于使用右手坐标系 坐标系由坐标轴与坐标原点组成.原点定义坐标系 ...

  10. 『IOS』 遇到问题记录(长期更新)

    遇到的很多问题,解决后都是自己记着,以为不会忘记,之后却会想不起来了. 所以把今后解决的问题记录在这. 一. 在二级页面设置了CAlayer的代理,在返回一级页面报错: EXC_BAD_ACCESS( ...