蒋业文


  • Home

  • Archives

  • Tags

  • About

MVVM模式在多Cell列表中的实践

Posted on 2017-02-01   |     |   visitors

MVVM模式已经在业界得到广泛应用, 通过将VC/View中的逻辑剥离到viewModel中,专注数据处理和布局计算; 当一个view的元素相同却需要展示成不同样式时,viewModel便扮演类似HTML的CSS角色,多个viewModel对应一个view,实现了view的“代码复用”;

本文将在MVVM的基础上, 通过多个CellModel 对应一个Cell的方式, 减少了Cell的种类和重复布局代码,实现了代码UI和布局分离; 通过子线程提前计算不同方向的布局数据, 加快了转屏速度,滑动流畅性得到提升。

Read more »

libextobjc常用macro原理和使用

Posted on 2016-09-10   |     |   visitors

本文通过对libextobjc 常用macro的原理讲解, 使用后, 简化了开发过程中代码, 使一些问题在编译前被发现, 减少runtime crash的发生.

libextobjc介绍

ReactiveCocoa, Carthage的作者Justin Spahr Summers, 对“hobby”项目libextobjc进行开源; libextobjc是objc的一些拓展与宏的集合, 极大地方便了objc代码的编写, 减少了关于retainCycle和内存释放的bugs;

Read more »

Shell对输入参数的验证

Posted on 2014-05-09   |     |   visitors

本文实现了对Shell输入参数的验证,包括个数和数据类型。学习如何接收shell函数的返回值以及正则表达式。

##shell函数的返回值
函数的返回值分为2两种:

  • 函数中的echo的标准输出
  • 函数中显式的return返回值
Read more »

Perl实现可变字节码算法

Posted on 2014-05-04   |     |   visitors

最近在阅读《大规模Web服务开发技术》一书,作为练习和鞭策,决定系统地写一写博客,加深理解。本文用Perl实现了可变字节码算法,对递增的整数序列的文本进行了压缩,压缩率能达到59%。

##可变字节码的定义

1
2
3
数值	                  32位二进制			    可变字节码
5 00000000 00000000 00000000 00000101 10000101
130 00000000 00000000 00000000 10000010 00000001 10000010

可变字节码,将整数序列中的冗余的高位0都去掉,其中130的可变字节码为00000001 10000010,前面8位中的1表示1128,后面8位中最高位的1表示,这是最终的一个字节,代表数字的结束。
所以130 = 1
128 + 2 (最后字节中的10),而 5 = 101(二进制)
可以看出,数值越小,可变字节码位数越少。因此对于递增的整数序列[1,2,12,20,39],可以只存储相邻值的差,从而减少了数值的大小。处理后变为[1,1,10,8,19]

Read more »

从1打印到最大的N位数

Posted on 2014-03-14   |     |   visitors

###Problem: 从1打印到最大的N位数, 当N=3时,即打印1,2,3,4…999

可以用一个循环,循环999次,依次打印;但是,如果变量定义为int类型时,32位的机子上,最大的unsigned数是2^32 -1, 最大的signed数是 2^31 -1 (更小,有一半为负数),这时,当最大的数超过2^32 -1时,就会溢出。

解决的办法是,申请一个长度为N+1的字符串,最后一位是结束符’\0’。初始化字符串的每一位都为0;然后循环打印,每次将字符串所代表的数字加1;直到最高位有进位时(999+1, 代表到达最大的N位数),停止;

Read more »

单链表相关问题

Posted on 2014-03-14   |     |   visitors

单链表的常用操作实现:删除、增加、反转、环形…

下面是对单链表的一些总结:

定义情况如下:

1
2
3
4
5
6
7
#define TRUE 1
#define FALSE 0
typedef int bool;
typedef struct node {
struct node * next;
int value;
} Node;

1. 针对一个单链表的常用操作

##(1)给点一个值value,删除链表中等于此值的节点

先判断头节点的值是否为value,是的话,改变头指针,指向下一个节点;
否则,遍历链表,知道找到一个节点,他的next的值为value,
将此节点指向下下个节点,最后删除中间的节点。
程序如下:
Read more »
蒋业文

蒋业文

6 posts
32 tags
GitHub Weibo
© 2014 - 2021 蒋业文
Powered by Hexo
Theme - NexT.Pisces