全局变量、局部变量、const、static、extern

来源:互联网 发布:树莓派安装unity3d 编辑:程序博客网 时间:2024/05/16 05:09

全局变量:

类里方法外、类外直接写NSString * str = @“xxx”;  str是全局变量(面向对象中,要使用全局变量,一般设置成类的属性)

局部变量:

写在类里方法内的变量是局部变量。

注意:

    const、static、extern只是三个变量修饰符    const决定变量能不能被改变    static可以决定变量的生命周期    extern可以想不到什么用处的跨文件传值?…至于变量的作用域,跟它们没关系,只能变量定义的地方有关。

const常量(只读)

(当不希望别人修改这个变量值的时候用,写在pch中可以起到宏的作用)
位置可以随便写

const作用

1. 用于修饰右边变量(基本变量,指针变量)2. 被const修饰变量只读

const与宏的区别

1. 编译的时刻不一样: 宏:预编译 const:编译2. 编译检查:宏不会做编译检查 const会3. 宏的好处:宏可以定义函数和方法 const不可以4. 宏坏处:大量使用宏,会导致预编译时间过长

常量指针与指针常量的区分

看指针*号 与 const 的先后顺序    const在*号前面,表示里面存的是常量值,const int * a = &b;  可以直接改b的值,但是不能通过*a改,编译器认为a里是个常量    *号在const前面,表示这个创建的指针变量不能再被赋值,int * const a = &b,a不能再赋值其他的地址

相关题目

 int * const p1; // p1:只读  *p1:变量 (const int) / (int const) *p2; // p2:变量 *p2:只读    (const int) / (int const) * const p4; // p4:只读 *p4:只读
iOS中const的位置

const在iOS中修饰字符串,const的位置在哪都无所谓的,因为重新赋值都会报错

原因,比如:    const NSString * str = @“ss”;   /    NSString * const str = @“ss”;    如果再赋值 str =   @“string”,都会报错    因为 str  = @“string” 本质上干了两件事:        1.将str的内存地址改成@“string”的地址           2. 将str内存中存的值改为string所以不管const位置在那,重新赋值都有问题。

生命周期

存在常量数据区,与应用程序生命周期相同

const在开发当中的使用

1.  const替换宏,宏:常用字符串或者基本数据定义成宏 -> const2.  修饰方法参数,让方法参数只读

static(提升生命周期):

如果有时候希望类里某个变量拥有整个app运行期间一般长的声明周期时,控制器销毁,变量依旧存在的时候,用这个修饰)

作用域(不会改变变量作用域):

修饰局部变量,只要被static修饰局部变量,这个局部变量的声明周期就会延长(整个app运行过程中都在),作用域不变修饰全局变量,只要被static修饰全局变量,这个全局变量只能在当前文件下使用

分配时刻:

程序一运行的时候就会分配内存

生命周期

程序运行期间一直存在static修饰的变量,只是在编译的时候进行初始化赋值,运行的时候就不会再运行这句代码。

注意点:

    在c99中指明全局变量和static变量的初始化式必须为常量表达式    static NSArray * array  = @[] / [NSArray array]  错误: initializer element is not a compile-time constant    只能:        static NSArray * array;         其他地方赋值    static NSString * str = @“”  这个是可以的,NSString总是特殊

extern(跨文件使用)

extern修饰的变量,名字全局内不能相同,否则报错:变量重定义)

使用方式(跨文件使用):

    A类有个属性:int a  = 8;   //  类外,类内:方法外。B类中想要使用:extern  int  a ;   // 位置随便,类外,类内:方法内,方法外这个时候A中的值,B就能获取,而且还能修改。一旦修改之后,A文件中a的值也变了

作用域

全局作用域(只需要在一个源文件中定义,就可以作用于所有的源文件)

生命周期

程序运行期间一直存在

static和const联合使用

static const NSString * reuseId = @“reuseId”;   // 在当前文件内可用的只读变量

开发中是如何避免重复定义?

做法:只要定义全局变量,都不能再自己的类中定义,一般开发中,我们会搞一个公共的const文件来定义全局变量
阅读全文
0 0
原创粉丝点击