iPhone开发札记【2011.10.27】

来源:互联网 发布:python mysql 查询 编辑:程序博客网 时间:2024/05/24 23:15

=》 可变参数函数

摘自:《va_list深究》

1. 基本知识

1) va函数的优势表现在使用的方便性和易用性上,可以使代码更简洁。

2) ANSI C标准下,va的宏定义在stdarg.h中,有va_list, va_start(), va_arg(), va_end()

3) 可变参数函数的参数分两部分:个数确定的固定参数和个数可变的可选参数。函数至少需要一个固定参数;可选参数声明时用"..."表示。


2. va函数的定义与va宏

1) va_list ap:定义一个指向可变参数列表的指针

2) va_start(ap, argN):使用参数列表指针ap指向参数列表中的第一个可选参数,其中argN是位于第一个可选参数之前的固定参数

3) va_arg(ap, type):返回参数列表中指针ap所指向的参数,返回类型为type,并使指针ap指向参数列表中下一个参数

4) va_copy(dest, src):dest, src的类型都是va_list,va_copy()用于复制参数列表指针,将dest初始化为src

5) va_end():清空参数列表,并置参数指针ap无效

6) 参数指针可以在参数列表中随意地来回移动,但必须在va_start()...va_end()之内


3. 编译器实现

1) va函数的实现就是对参数指针的使用和控制

2) 对于可选参数,先将指针指向第一个可选参数,然后依次白后移指针,根据与结束标志的比较来判断是否已获得全部参数。

3) va中的结束标志必须事先约定好,否则,指针会指向无效的内存地址,导致出错。

4) va机制中用宏_INTSIZEOF(n)来解决计算移动指针偏移量时涉及到的内存对齐问题。

5) 宏va_start是对参数的地址进行操作,要求参数地址必须是有效的,因此,寄存器类型、数组、函数类型都不能作为va函数的参数。


4. va函数的隐患

1) 如何确定参数类型:进入了强制类型转换

2) 结束标志:如果没有结束标志,va将按默认类型依次返回内存中的内容,直到访问到非法内存而出错退出。


=》UITableView背景

1. 更改背景色

1) 设置表格视图的backgroundColor属性

2) 单元格继承表格视图的背景色,无法直接更改单个单元格的背景色

3) 由于UITableView继承自UIScrollView,所以可以让表格背景色随着用户滚动表格的程度发生变化。实现UIScrollViewDelegate的scrollViewDidScroll方法并在该方法中计算新的颜色值。


2. 设置表格背景图

1) 在表格下放一层图片,同时设置UITableView的backgroundColor属性为[UIColor clearColor]; 即设置UITableView的背景的alpha值为0。

原创粉丝点击