// 闲来无聊测试一下

第一轮:

1、numberOfSectionsInTableView    :假如section=2,此函数只执行一次,假如section=0,下面函数不执行,默认为1

2、heightForHeaderInSection  ,执行两次,此函数执行次数为section数目

3、heightForFooterInSection  ,函数属性同上,执行两次

4、numberOfRowsInSection    ,此方法执行一次

5、heightForHeaderInSection     ,此方法执行了两次,我其实有点困惑为什么这里还要调用这个方法

6、heightForFooterInSection   ,此方法执行两次,

7、numberOfRowsInSection,执行一次

8、heightForRowAtIndexPath  ,行高,先执行section=0,对应的row次数

第二轮:

1、numberOfSectionsInTableView ,一次

2、heightForHeaderInSection  ,section次数

3、heightForFooterInSection    ,section次数

4、numberOfRowsInSection    ,一次

5、heightForHeaderInSection  ,执行section次数

6、heightForFooterInSection,执行section次数

7、numberOfRowsInSection,执行一次

8、heightForRowAtIndexPath,行高,先执行一次

9、cellForRowAtIndexPath

10、willDisplayCell

然后8、9、10依次执行直到所有的cell被描画完毕

位移枚举

  • 位移枚举是非常古老的 C 语言技巧
  • 按位与 如果都是 1 结果就是1
  • 按位或 如果都是 0 结果就是0

演练

1  定义枚举类型

/// 操作类型枚举

typedef enum {

ActionTypeTop       = 1 << 0,

ActionTypeBottom    = 1 << 1,

ActionTypeLeft      = 1 << 2,

ActionTypeRight     = 1 << 3

} ActionType;

  • 方法目标

根据操作类型参数,做出不同的响应

操作类型可以任意组合

  • 方法实现

- (void)action:(ActionType)type {

if (type == 0) {

NSLog(@"无操作");

return;

}

if (type & ActionTypeTop) {

NSLog(@"Top %tu", type & ActionTypeTop);

}

if (type & ActionTypeBottom) {

NSLog(@"Bottom %tu", type & ActionTypeBottom);

}

if (type & ActionTypeLeft) {

NSLog(@"Left %tu", type & ActionTypeLeft);

}

if (type & ActionTypeRight) {

NSLog(@"Right %tu", type & ActionTypeRight);

}

}

  • 方法调用

ActionType type = ActionTypeTop | ActionTypeRight;

[self action:type];

代码小结

  • 使用 按位或 可以给一个参数同时设置多个 类型
  • 在具体执行时,使用 按位与 可以判断具体的 类型
  • 通过位移设置,就能够得到非常多的组合!
  • 对于位移枚举类型,如果传入 0,表示什么附加操作都不做,通常执行效率是最高的
  • 如果开发中,看到位移的枚举,同时不要做任何的附加操作,参数可以直接输入 0!

iOS 特有语法

  • iOS 5.0之后,提供了新的枚举定义方式
  • 定义枚举的同时,指定枚举中数据的类型
  • typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions)

位移枚举,可以使用 按位或 设置数值

  • typedef NS_ENUM(NSInteger, UITableViewStyle)

数字枚举,直接使用枚举设置数值

typedef NS_OPTIONS(NSUInteger, ActionType) {

ActionTypeTop       = 1 << 0,

ActionTypeBottom    = 1 << 1,

ActionTypeLeft      = 1 << 2,

ActionTypeRight     = 1 << 3

};

TableView的执行流程 & 位移枚举的更多相关文章

  1. 追源索骥:透过源码看懂Flink核心框架的执行流程

    li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...

  2. springMvc的执行流程(源码分析)

    1.在springMvc中负责处理请求的类为DispatcherServlet,这个类与我们传统的Servlet是一样的.我们来看看它的继承图 2. 我们发现DispatcherServlet也继承了 ...

  3. 透过源码看懂Flink核心框架的执行流程

    前言 Flink是大数据处理领域最近很火的一个开源的分布式.高性能的流式处理框架,其对数据的处理可以达到毫秒级别.本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程 ...

  4. Mybatis执行流程学习之手写mybatis雏形

    Mybatis是目前开发中最常用的一款基于ORM思想的半自动持久层框架,平时我们都仅仅停留在使用阶段,对mybatis是怎样运行的并不清楚,今天抽空找到一些资料自学了一波,自己写了一个mybatis的 ...

  5. 【阅读SpringMVC源码】手把手带你debug验证SpringMVC执行流程

    ✿ 阅读源码思路: 先跳过非重点,深入每个方法,进入的时候可以把整个可以理一下方法的执行步骤理一下,也可以,理到某一步,继续深入,回来后,接着理清除下面的步骤. ✿ 阅读本文的准备工作,预习一下Spr ...

  6. 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...

  7. 第二天 ci执行流程

    第二天 ci执行流程 welcome 页面 this this->load 单入口框架index.php 两个文件夹 system application定义 定义常亮路径 载入 codeign ...

  8. 轻量级前端MVVM框架avalon - 执行流程2

    接上一章 执行流程1 在这一大堆扫描绑定方法中应该会哪些实现? 首先我们看avalon能帮你做什么? 数据填充,比如表单的一些初始值,切换卡的各个面板的内容({{xxx}},{{xxx|html}}, ...

  9. [Java编程思想-学习笔记]第4章 控制执行流程

    4.1  return 关键字return有两方面的用途:一方面指定一个方法结束时返回一个值:一方面强行在return位置结束整个方法,如下所示: char test(int score) { if ...

随机推荐

  1. java项目的划分方式:模块优先还是层优先?

    I've seen and had lots of discussion about "package by layer" vs "package by feature& ...

  2. 【BZOJ-1468】Tree 树分治

    1468: Tree Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1025  Solved: 534[Submit][Status][Discuss] ...

  3. JSR303注解

    Annotation 属于Bean Validation 规范 应用位置 作用 对Hibernate Core中的元数据的影响 @AssertFalse yes field/property 检查被标 ...

  4. dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . dedecms原生提供一个"本地变量注册"的模拟 ...

  5. 【Alpha阶段】第五次Scrum例会

    由于软工整个项目规划延期1周,我们将停止2天的Scrum,进行相应的修整 会议信息 时间:2016.10.21 22:30 时长:20min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个 ...

  6. linux Basis --- tar command

    -c: compress archives -x:decompress archives -t:check archives -z:whether it has the attribute of gz ...

  7. map转json

    if (javaObject instanceof Map) { Map<Object, Object> map = (Map<Object, Object>) javaObj ...

  8. 使用chrome查看网页上效果的实现方式

    使用chrome查看网页上效果的实现方式 chrome是一个极为强大的工具,很多时候,我们不知道一个效果怎么实现的,我们完全可以找到响应的网页,然后找到其html文件,和js文件,查看源码,获得其实现 ...

  9. json转换成对象

    在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...

  10. c中三大区的解析

    1.栈,堆和静态存储区是 堆和静态存储区是C语言程序常涉及的三个基本内语言程序常涉及的三个基本内存区2.栈区主要用于函数调用的使用3.堆区主要是用于内存的动态申请和归还4.静态存储区用于保存全局变量和 ...