容易混淆的基本概念 成员变量 局部变量 全局变量

简介: 在实际开发与学习中,特别容易混淆几个基本概念:成员变量、局部变量、全局变量。了解这些概念的属性,存储在实际编码中非常有用。

成员变量

@interface Person:NSObject
{
    int age;
} 
@end
  • 写在类声明的大括号中的变量,我们称之为成员变量(属性、实例变量)
  • 成员变量只能通过对象访问
  • 成员变量不能离开类,离开类之后就不是成员变量
  • 成员变量不能在定义的同时进行初始化
  • 存储:堆(当前对象对应的堆的存储空间中)。存储在堆中的数据,不会被系统释放,只能程序员自己释放

局部变量

-(void)info{
    int age = 0;
}
  • 写在函数或者代码块中的变量,我们称之为局部变量
  • 作用域:从定义的那一行开始,一直到大括号或者return
  • 局部变量可以先定义再初始化,也可以定义的同时初始化
  • 存储:栈。存储在栈中的数据,系统给会自动释放

全局变量

@implementation Person
int age = 0;
-(void)info{

}
@end
  • 写在函数和大括号外部的变量,称为全部变量
  • 作用域:从定义的那一行开始,一直到文件末尾
  • 全局变量可以先定义再初始化,也可以定义的同时初始化
  • 存储:静态区,程序一启动就会分配存储空间,直到程序结束才会释放
  • 全局变量分为两种:

    • static修饰全局变量,只在该源文件中可用

        static int age =3;
        @implementation Person
        @end
      • 在OC的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中 。不过可以调用这个类的方法间接的修改这个静态变量的值
      • static关键字声明的变量须放在implementation外面,或者方法中,如果不为它赋值,默认为0,它只在程序开机初始化一次(并不是该类实例化后才初始化的)
      • 将static静态变量写在方法中,它的初始化也是在程序开机时,程序一旦启动以后static是不能在创建的
    • extern修饰全局变量,可以被其他类引用
      .h头文件中声明

      //.h文件中
      extern int age;

      .m实现文件中赋值

        //.m文件中
        #import "Person.h"
        int age = 10;
        @implementation Person
      
        @end 
    • extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量或者函数时时,在其他模块中寻找其定义。另外,extern也可用来进行链接指定
    • 注意:命名一定要很独特,才能区分与其他源文件中的全局变量,如果出现跟其他源文件同名的全局变量,则会报错误

      Snip20180813_3.png

  • 区别:

    • extern修饰的全局变量默认是有外部链接的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过external全局变量的声明,就可以使用全局变量。
    • static修饰的全局静态变量,作用域是声明此变量所在的文件。
目录
相关文章
|
7月前
|
存储 Java 编译器
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
【Java变量】 局部变量、成员变量(类变量,实例变量)、方法参数传递机制
92 0
全局变量初始化顺序探究
全局变量初始化顺序探究
|
5月前
|
存储 Java
成员变量与实例变量的区别与用途详解
成员变量与实例变量的区别与用途详解
|
存储 C语言 Perl
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
今天给大家讲一下什么是局部变量、全局变量、临时变量、静态变量,这些变量都有什么区别,以及在西门子S7-1200中这些变量如何来使用。
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
|
C语言
初识C语言的static关键字(修饰局部变量、全局变量和函数)
初识C语言的static关键字(修饰局部变量、全局变量和函数)
|
存储
局部变量和成员变量的4个区别
定义位置不同、内存中的位置不同、周期不同、初始化不同。
123 0
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
使用final关键字修饰一个变量时,是指引用变量不能变,但是引用变量所指向的对象中的内容还是可以改变的。
411 0
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
|
Java
Java面向对象——详解成员变量和局部变量的区别
Java面向对象——详解成员变量和局部变量的区别
121 0
|
存储
面试5 如何理解静态变量,局部变量,全局变量
静态变量:在程序运行期间分配的固定的存储空间变量,称为静态变量。 局部变量:在一个函数的内部定义的内部变量,它只在本函数范围内部有效,只有在本函数内部才能使用,在本函数以为是不能进行使用的,称为局部变量。
1078 0