全局变量 /static全局变量 /局部变量/成员变量/extern 分析

Posted 看谷秀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全局变量 /static全局变量 /局部变量/成员变量/extern 分析相关的知识,希望对你有一定的参考价值。

 

part1

全局变量/static全局变量 

1 若程序只有一个源文件(就是尼玛就一个类),则没区别,都是存储在静态区.

   (全局变量存储在静态区中 程序启动时就会分配存储空间 直到程序结束才会释放)

2 若程序有多个源文件(多个文件组成),则有区别

   全局变量: 可以extern外部文件引用,

    static 全局变量: 则不可以外部文件引用 (仅仅本文件独享)

 

part2

static:修饰变量(全局,局部)使用 / 全局变量/static变量 存储在静态区 程序运行 只初始化一次,程序结束,变量才会销毁

两个作用 

ps1 :局部变量copy 进静态区,延长局部变量声明周期,程序运行期间 一直存在

ps2: 防止全局变量外部引用,外部引用extern

 

 

一.成员变量 : 写在类声明的大括号中的变量叫成员变量 (也叫属性/实例变量)

    成员变量不可离开类 离开了类就不是成员变量

  成员变量不能再定义的同事初始化

  成员量只能通过对象来访问

  成员变量存储在堆中(当前对象对应的堆得存储空间中) 不会被系统自动释放 只能有程序员手动释放

 

二.局部变量 :写在代码块或函数中的变量为局部变量

  局部变量的作用域 : 从定义的那一行开始,一直到遇到大括号或return(也就是这个变量所在的代码块或函数结束时)

  局部变量可以先定义后初始化,也可以在定义的同时就初始化

  局部变量存储在栈里面 系统会自动释放

 

三.全局变量 : 卸载函数外或大括号外的变量就是全局变量

  全局变量的作用域 : 从定义哪行开始 到文件末尾

    全局变量可以先定义再初始化,也可以定义的同时初始化

    全局变量存储在静态区中 程序启动时就会分配存储空间 直到程序结束才会释放

#import "SFViewController.h"
int instance2;//这叫全局变量 可以外部文件引用
static int instance3 = 20;//这叫全局变量(仅仅本类使用)
@interface SFViewController ()
//@property (nonatomic ,copy)NSString *instance5;这也叫成员变量
{
 NSString *instance1;//这叫成员变量
}
@end
NSString *instance;// 这也叫全局变量
@implementation SFViewController
{

    NSString *instance4;//这也叫成员变量
}
//ps: h文件成员变量定义逻辑 同m中.

ps: oc不支持 .h文件中定义全局变量 (个人猜测:头文件经常被引用,容易引起重复定义)

 

以上是关于全局变量 /static全局变量 /局部变量/成员变量/extern 分析的主要内容,如果未能解决你的问题,请参考以下文章

Java中成员变量局部变量全局变量静态变量成员变量

static变量以及方法

java 自变量 局部变量

IOS总结 静变量static全局变量extern局部变量实例变量

static关键字总结

static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?