UITableView 重用机制

最近在看这个瀑布流的项目:https://github.com/pingyourid/waterView

他自称是可以重用的,看到最后发现,这个demo的瀑布流功能做的蛮深入的。

他通过设置reuseIdentifier,视图滚动时进进出出实现视图的重复利用。区别于UITableView的UITableViewCell的重用机制,瀑布流Demo完全实现了手动控制。

UITableView虽然用了无数次,但是一直没有自习整理过他的重用机制。今天统一整理下,也方便日后实现自定义的重复功能。

重用

  1. 重用机制,主要用在UIScollView视图中,子视图会频繁上下滑动,但是自子视图的结构非常类似。通过重用,避免大量的内存开销。尤其是在iphone 单核时代。
  2. UITableView在cellForRow方法中dequeueReusableCellWithIdentifier设置重用标记。
  3. 当面屏幕中所显示的子视图都是真实存在,相互之间不重用。但是当前子视图可以重用已经init但是已经移除视图外的子视图。

实现机制

假如当前屏幕UITableView 可以最多显示6个cell,用3种不同的cell,也就是需要设置3个不同的identifier。

  1. cellForRow最多生成可以占满屏幕的cell,也就是6个。这个时候,所有的cell都不会加入到reuse cell queue。也就是生成了2组不同identifier的cell,共6个。
  2. 向上滑动,生成第7个cell。
  3. 继续滑动,第1个cell隐藏时,此cell加入reuse cell queue。
  4. 向上滑动,生成第8个cell。
  5. 继续滑动,第2个cell隐藏时,此cell加入reuse cell queue。
  6. 向上滑动,生成第9个cell。
  7. 继续滑动,第3个cell隐藏时,此cell加入reuse cell queue。
  8. 向上滑动,生成第10个cell。
  9. 此时dequeueReusableCellWithIdentifier可以从reuse cell queue获取到reuse cell,就不在创建新的cell,直接返回,重新配置数据即可,并把此cell从队列去移除。
  10. 到第12个cell,都是此逻辑。然后每3个cell以此往复。

hexo github 创建个人博客

前几天用jekyll,各种不爽。

前同事推荐下,果断换hexo

部分github page 的设置流程,在此略过,见上一篇博客。

安装hexo环境

见[node.js官网]:http://nodejs.org/

安装Git

见[git官网]:http://git-scm.com/    

正式安装hexo

mac用户,直接执行

sudo npm install hexo -g

创建web项目

hexo init file

file至你要创建的项目地址

启动服务

进入项目地址,执行

hexo server

执行完毕后,访问:localhost:4000/ 即可

安装npm

sudo npm install

安装模版nut

模板地址github

1:下载模板至theme文件夹
2:yml配置theme: nut
3:执行sudo npm install lodash --save
4:执行sudo npm install marked --save

生成静态文件

1:hexo generate
2:hexo deploy

ok 然后把这个写文件上传至kingundertree.github.io命名的repositories,设置github page 细节自己处理。

然后,访问http://kingundertree.github.io/

Ok!

利用jekyll github搭建自己的博客

第一步:github构建项目

1。比如我的github地址:https://github.com/kingundertree/,需要新建repository
2.新建repository地址必须和github的username保持一致,生成地址:https://github.com/kingundertree/kingundertree.github.io
3.设置github pages,在repository的setting中GitHub Pages部分,点击generator按钮即可
4.git clone 至本地

提示:也可直接按照官方教程操作即可[点击](https://pages.github.com/)

第二步:安装jekyll

1.mac示例,前提是安装ruby
2.执行,jekyll install

第三步:安装jekyll-bootstrap

1.获取jekyll-bootstrap代码,[github 源代码](https://github.com/plusjade/jekyll-bootstrap/)
2.将代码复制到第一步的clone 项目中
3.修改代码,push等等

第四部:启动jekyll服务

1.进入clone 项目
2.执行jekyll server 即可。我犯了一个错误,执行了jekyll --server,久久不能生效

第五步:CNAME

1.项目中添加:CNAME文件,添加你要指向URL:www.xiazer.com(这是我的,你可以指向自己的)

第六步:域名解析

1.创建解析记录类型A,记录值180.168.41.175(github 官方ip)
2.然后,如果没有异常,十几分钟即可通过www.xiazer.com

解释下整个解析流程:

1.github.com/username 和 repository的https://github.com/username/username.github.io 的username相同,且创建username.github.io的repository时,该项目的github pages默认地址会指向username.github.io。(github 系统的逻辑,我在这里被坑了好久)
2.创建CNAME,可以把username.github.io地址指向CNAME中url
3.然后再把你的域名地址解析指向github,github会通过CNAME的url进行匹配,如果CNAME的url同指向github的url一致,则将username.github.io跳转至你的域名

=========================
ok,解释完毕。搞了一个周末的东西,祝你顺利。

我接着去玩下jekyll语言了,设计下自己的样式。