KAOLA's note.

几种变量类型

字数统计: 404阅读时长: 1 min
2018/11/26 Share

1. 全局变量:

  • 要在函数外面声明
  • 可以跨文件访问
  • 声明时可以赋值 默认初始值为0
  • 储存在【全局(静态)存储区static】
  • extern 关键字
  • extern varName代表的是varName是调用外部声明的变量

2. 静态变量

  • 可以在函数外部声明、亦可在函数外部声明
  • 仅在声明文件内访问、不可以改变局部变量的作用域
  • 声明时关键字为static
  • 声明时可以赋值 默认初始值为0
  • 储存在【全局(静态)存储区static】、只有一份内存
  • 可以延长变量的生命周期

3. 局部变量

  • 要在函数内部声明
  • 运行到该函数时才会分配内存
  • 只在声明变量的函数内部访问
  • 一般数据类型储存在栈帧中,new init开头的方法初始化的对象储存在堆上。

4. const关键字

  • 修饰关键字右边的变量
  • 修饰后变量为只读
  • 场景🌰:提供一个方法,放入参数是某个变量的地址,方法内部不能修改地址(在诸多Foundation框架提供的API中可以看到这个场景的应用)

    5. 内存分区

    1. 栈区:
    2. 堆区:
    3. 全局区:
    4. 文字常量区
    5. 程序代码区

题外话

结合看过的博客,自己在实践的过程当中发现,NSString 比较特殊,并不完全如其他对象,是分配在堆区的。

update:在objc的源码中经常可以看到isTargetPointer这样的判断,由此知道了NSTargetPointer这样的特殊类型,笔记请看[NSTargetPointer]

CATALOG
  1. 1. 1. 全局变量:
  2. 2. 2. 静态变量
  3. 3. 3. 局部变量
  4. 4. 4. const关键字
  5. 5. 5. 内存分区
  6. 6. 题外话