美文网首页
OC中的变量与常量

OC中的变量与常量

作者: 邓布利多教授 | 来源:发表于2019-03-26 11:29 被阅读0次
从我的理解出发,在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的内存中的内容不能被修改。

相关文章

网友评论

      本文标题:OC中的变量与常量

      本文链接:https://www.haomeiwen.com/subject/kpowmqtx.html