1. 宏的使用
- 常用的字符串抽成宏(注: 宏只会分配一次内存存在静态区 测试方法: %p打印地址信息)
- 常用的代码抽成宏
2. const的使用
- 常量 只能修饰右边的变量:基本指针/对象
- 当有字符串常量的时候, 苹果推荐我们使用const
- 使用const修饰全局变量位只读, 放于变量左边
- 使用const定义一个全局参数
//定义全局变量
NSString * const name = @"我是不可修改的";
//定义不可修改参数
-(void)test:(NSString * const)name{
//name不可修改
}
//修饰指针变量
-(void)test:(int *const)p{
//p指针第值不允许自己修改
}
int a = 10;
[self test:&a];
3. const与宏的区别
- 编译时刻: 宏:预编译 const: 编译时
- 编译检查: 宏:不会检查错误 const:会检查错误
- 宏可以定义代码(好处)
- 宏会造成编译缓慢(坏处)
4. static与const的使用
static的作用
- 修饰局部变量
延长局部变量的生命周期,只要程序运行, 局部变量就会一直存在, 只会分配一次内存
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
static int i = 0;//只分配一次内存, 断点调试
i++;
NSLog(@"点击次数: %i",i);
}
- 修饰全局变量
只会修改全局变量的作用域,表示只能当前文件内使用
//定义静态全局变量,表示只能当前文件内使用
static int const i = 0;
extern的作用
- 只能声明一个变量,不能定义变量,不可初始化参数值
// 使用场景
extern int a;//调用其他文件的全局变量
5. static与const的联合使用
- static和const修饰全局变量
static修饰全局变量, 修改作用域表示在当前文件中使用
const修饰变量,表示只读
联合使用: 静态全局只读变量
static NSString * const name = @"我是不可修改的,只能在本文件中使用";
extern和const的联合使用
- 定义.h和.m文件
- .h文件
//声明 //定义全局变量 /**********首页模块**********/ UIKIT_EXTERN NSString * const name1;
UIKIT_EXTERN NSString * const name2;
UIKIT_EXTERN NSString * const name3;
UIKIT_EXTERN NSString * const name4;
UIKIT_EXTERN NSString * const name5;
/**************************/
>.m文件
>```
>//定义全局变量
>/**********首页模块**********/
>NSString * const name1 = @"123";
>NSString * const name2 = @"123";
>NSString * const name3 = @"123";
>NSString * const name4 = @"123";
>NSString * const name5 = @"123";
>/**************************/
>```
>- 使用方法
导入.h文件,直接使用 name1
##6. class,superClass,super
>- super 编译修饰符, 不是指针, 指向父类的标志,本质还是拿当前对象去调用
>- 定义Person,SonPerson,在子类SonPerson中定义方法
-(void)testPerson
{
NSLog(@"%@ %@ %@",[self class],[self superclass],[super class]);
}
>- 打印结果
2017-02-04 16:33:38.113 super,superClass,super[22121:2140396] SonPerson Person SonPerson