从我的理解出发,在OC中,变量包括常量,变量是OC中对所有类型定义的统称。书上说:用关键字const修饰的变量称之为常量,它的值是在定义的时候就确定的,是不可修改的,表示变量值只读
。
我们在写代码的时候,在初始化的时候没有值,叫做声明;
初始化的时候有值,叫做定义。
例如:
/**
声明
*/
int count;
/**
定义
*/
int count = 10;
变量
变量?值能变化的量就变量?谁能告诉我变量的定义是什么?不要跟我说什么成员变量实例变量的这些东西。我只想知道“变量”这两个字在OC中的真是定义。
常量
用const修饰的变量叫做常量。它的值是在定义的时候就确定的,是不可修改的,表示变量值只读。
我们常用的变量有:
- 局部变量
- 全局变量
- 实例变量
- 基本数据类型变量
- 静态变量
- 常量
反正我常用的就这些个,至于还有没有别的,答案是肯定的,必须有啊,不用说的都知道,只不过其他的变量还有好多,关于怎么分类的话,就麻烦知识渊博的人来讲讲吧
接下来介绍一下这几种变量,说的不好,有错误的欢迎指出,谢谢了!
-
1、局部变量
写在函数方法内的变量,称之为局部变量。
作用域
是从变量定义的那一行开始,一直到遇到该函数方法的结束大括号或者return或者break之间。
存储区域
是在栈区,存储在栈中的数据有一个特点,系统会自动释放。
-
2、全局变量
写在函数和代码块外部的变量,称之为全局变量。
作用域
是整个工程的源文件。
存储区域
是在静态区,程序一启动就会分配存储空间,直到程序结束才会释放。
- 扩展
extern
全局变量的声明有两种方式:
一种是在.h文件用extern
声明,然后在.m文件定义,在调用这个全局变量的文件需要引入该文件的.h文件,例如:
/**
.h文件
*/
extern NSString * const string;
/**
.m文件
*/
NSString * const string = @"全局变量";
另一种方式是在.m文件定义,在需要用到的地方通过
extern
引入,不需要引入头文件,例如:
/**
.m文件
*/
NSString * const string = @"全局变量";
/**
用到的地方
*/
extern NSString * const string;
-
3、实例变量
对类的声明的变量叫做实例变量。
作用域
是当前源文件。
存储区域
是在堆区,有人会问为什么?我瞎说的,我是根据初始化类的时候会用到alloc、init、new,所以我判定实例变量是存储在堆区的。(这个存储区域我真的不知道这么说对不对,希望知道准确答案的大佬点明)
-
4、基本数据类型变量
对基本数据类型的声明叫做基本数据类型变量。
作用域
是当前源文件。
存储区域
是在静态区,程序一启动就会分配存储空间,直到程序结束才会释放。
-
4、静态变量
对所有变量用
static
修饰之后叫做静态**变量(原本是什么变量,就在原本的名称前面加上静态俩字)
,简称静态变量。
作用域
是函数方法内或者当前源文件内。
存储区域
是在静态区,程序一启动就会分配存储空间,直到程序结束才会释放。
- 扩展
static
对于局部变量
来说,用static修饰过,只会初始化一次且在程序中只有一份内存,不会改变局部变量的作用域,但是会延长局部变量的生命周期(直到程序结束才销毁)。对于
全局变量
来说,用static修饰过,只会初始化一次且在程序中只有一份内存,作用域会变更到当前源文件,外部是访问不到该全局变量的(即使在外部使用extern关键字也无法访问)。
-
5、常量
用关键字
const
修饰的变量称之为常量,它的值是在定义的时候就确定的,是不可修改的,表示变量值只读。
作用域
是整个工程的源文件。
存储区域
是在常量区,程序一启动就会分配存储空间,直到程序结束才会释放。
- 扩展
const
用const
修饰变量有四种写法:
1、const NSString *str1 = @"123";
2、NSString const *str2 = @"123";
3、NSString * const str3 = @"123”;
4、const NSString * const str3 = @"123”;
修饰基本数据类型也是这四种写法,简单的理解就是3和4的str3的内存中的内容不能被修改。
网友评论