Super
之前有一道面试题,例如有一个 Person
类,那么 [self Class]
和 [super Class]
的输出结果分别是什么?
答案为都是 Person
其实 super
是 Xcode
的编译器特性,当 Xcode
的编译器检测到 super
这个关键字时,会自动去当前类的父类的方法列表中去寻找并执行执行该方法。当然如果父类本身就没有这个方法,编译器会报错
Const
常量字符串,目前苹果强烈推荐使用 Const
。在 Swift
中已经废弃了之前与之对应的
define
Const
用来修饰右边的变量。Const
修饰的变量只可读。
Const 与 宏定义 的区别?
- 编译时刻:
#define
预编译,Const
编译时刻 - 编译检查:
#define
直接在编译时进行替换,不做检查。Const
会做检查,也会报编译错误。 #define
宏定义可以 定义一些简单的函数,而 Const 不可以#define
宏会拖慢编译的速度。
static
修饰局部变量
- 延长局部变量的生命周期
- 局部变量只会生成一份内存
- 改变局部变量的作用域
修饰全局变量
- 只能在本文件中使用
- 避免重复定义全局变量
static const 混用
在文件中经常将 Static
和 extern
结合使用,定义一个不可改变的全局常量
例如:
1 | static NSString * const account = @"accountID"; |
这个值是唯一的、固定的、不可改变的。
Extern
只可以用来获取全局变量,不可以用来定义,extern
首先会在自己当前的文件中查找,如果没有找到,才会到其他文件中查找。
在开发中常用的方式是将项目中常用的一些常量,写在某个文件中
1 | // .h文件中 |
导入后,外部的其他文件就可以调用这个文件了。