一.static关键字
(1).在局部变量中使用。在编译期就会开辟内存空间,只会初始化一次,放在静态变量区。不会改变作用域,但是会延长生命周期,在程序结束后才会被释放。
(2).在全局变量中使用,就会改变作用域,仅限于当前类起作用。(注:可以通过调用函数等方式间接修改)
举例:如果不加static,在别的类中可以使用extern关键字进行引用以及修改。
1.png ![屏幕快照 2017-06-14 下午2.45.15.png](https://img.haomeiwen.com/i1672724/e8dd30e7a0e385e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
二.const关键字
(1).被const修饰的标记为只读变量
修饰的是右边的变量,static int a,修饰常量a为只读, static int *a修饰指针 *a为只读。
(2).其他使用及注意
const与宏的区别
- 编译时刻:宏是预编译(编译之前处理),const是编译阶段。
- 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误。
- 宏的好处:宏能定义一些函数,方法。 const不能。
- 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新换。
- 宏放在常量去,只会生成一份内存。
- static与const作用:声明一个只读的静态变量
- 经常使用的同一个字符串常量,可以使用extern与const组合
三.
(1).__bridge只做类型转换,但是不修改对象(内存)管理权;
(2).__bridge_retained(也可以使用CFBridgingRetain)将Objective-C的对象转换为Core Foundation的对象,同时将对象(内存)的管理权交给我们,后续需要使用CFRelease或者相关方法来释放对象;
(3).__bridge_transfer(也可以使用CFBridgingRelease)将Core Foundation的对象转换为Objective-C的对象,同时将对象(内存)的管理权交给ARC。
四.typedef
typedef仅仅是类型定义,和#define差不多,但是区别是,typedef仅仅对于类型,不针对值。
例:
typedef char * PChar;
PChar a, b; //相当于char *a; char *b;
注:在swift中换成typealias Location = CGPoint 。(关键字typealias)
网友评论