static和extern使用
先了解作用,才知道怎么使用。
static 作用 :
* 修饰局部变量:
1. 延长局部变量的生命周期 , 程序结束才会销毁。
2. 局部变量只会生成一份内存 , 只会初始化一次。
3. 改变局部变量的作用域。
static 作用 :
* 修饰局部变量:
1. 延长局部变量的生命周期 , 程序结束才会销毁。
2. 局部变量只会生成一份内存 , 只会初始化一次。
3. 改变局部变量的作用域。
- (
void
)touchesBegan:(
NSSet
<
UITouch
*> *)touches withEvent:(
UIEvent
*)event{
// static 修饰局部变量
static int i = 0;
i++;
NSLog(@"%d",i);
// static 修饰局部变量
static int i = 0;
i++;
NSLog(@"%d",i);
}
*
修饰全局变量
1.
只能在本文件中访问
,
修改全局变量的作用域
,
生命周期不会改
2. 避免重复定义全局变量
2. 避免重复定义全局变量
全局变量:只有一份内存,所有文件共享,与
extern
联合使用。
int a = 20;
static
修饰全局变量
static
int age = 20;
extern作用:
*
只是用来获取全局变量
(
包括全局静态变量
)
的值,不能用于定义变量
extern 工作原理 :
extern 工作原理 :
* 先在当前文件查找有没有全局变量,没有找到,才会去其他文件查找。
static和const联合使用
static
和
const
修饰全局变量
static
修饰全局变量
,
修改作用域
.
表示在当前文件中使用
const
修饰变量
.
变量只读
静态全局只读变量
当前字符串只能在本文件使用
,
并且只读
,
不能改
iOS
中
staic
和
const
常用使用场景,是用来代替宏,把一个经常使用的字符串常量,定义成静态全局只读变量
static
NSString * const name = @"123";
extern和const联合使用
什么使用
static,
使用全局
,
就看下当前字符串常量是否需要被其他文件共享
如果需要共享
,
使用全局
,
不需要共享使用
static
- static与const组合:在每个文件都需要定义一份静态全局变量。
- extern与const组合:只需要定义一份全局变量,多个文件共享。
全局常量正规写法:开发中便于管理所有的全局变量,通常搞一个GlobeConst文件,里面专门定义全局变量,统一管理,要不然项目文件多不好找。
GlobeConst.m
#import
<Foundation/Foundation.h>
定义全局变量
全局只读变量
/*********************** 首页 ***************************************/
NSString
*
const
firstNameKey =
@“
firstName
"
;
/***************************
首页
***********************************/
/***********************
发现
***************************************/
NSString
*
const
findNameKey =
@“
findName
"
;
/***************************
发现
***********************************/
GlobeConst.h
#import
<Foundation/Foundation.h>
声明
UIKIT_EXTERN = extern
/***********************首页***************************************/
UIKIT_EXTERN
NSString * const firstName;
/***********************
首页
***************************************/
/***********************
发现
***************************************/
UIKIT_EXTERN
NSString * const findName;
/***************************
发现
***********************************/
#ifdef __cplusplus
#define UIKIT_EXTERNextern "C" __attribute__((visibility ("default")))
#else
#define UIKIT_EXTERN extern __attribute__((visibility ("default")))
#else
#define UIKIT_EXTERN extern __attribute__((visibility ("default")))
#endif