IOS 成员变量,全局变量,局部变量定义,static与extern的区别


1,先说定义

 1)成员变量定义:生存与该类的生命周期,变量存活周期跟你定义的该类实体对象一样;作用域是整个实体对象;可以在h文件中声明或者在m文件中@implementation上面添加的

#import "S1ViewController.h"

@interface S1ViewController ()

//这里做声明

@end

@implementation S1ViewController

@end

举例:S1ViewController.h文件中定义

@interface S1ViewController : UIViewController

{

    NSString* sttr2;    //  S1ViewController实体对象的成员变量

}

@property(nonatomic,retain) NSString* sttr2;  //定义点语法的快捷操作setter 与 getter方法

@end

注明:在h文件中定义的变量,在外部可见

.h声明了类,相当于java的接口,在这里interface块外声明的函数和属性都是外部可见的,但是在块内的貌似是私有的

.m里面的所有东西都是对外封闭的   这样就是有效的源码的开源与闭源;

 2)全局变量

  定义:在@implementation外定义的变量(在@implementation中定义也是可以但是一般不这么干)

举例:

//规范的

 

static int hu=3;//全局变量

NSString*sttr1=@"S1ViewController";//全局变量

@implementation S1ViewController

@end 

//不规范的

@implementation S1ViewController

static int hu=3;//全局变量

NSString*sttr1=@"S1ViewController";//全局变量

@end 

  全局变量分为两种:

1)static 修饰的  也称私有全局变量,只在该源文件中可用

   学习过Java 或者 C 语言的朋友应该很清楚static关键字吧?在某个类中声明一个static 静态变量, 其他类中想使用它或者修改它不用new 这个对象 ,直接使用它的类名方可直接拿到这个静态变量的对象,遍可以在其他类中任意修改这个变量的数值。它是存于全局变量区,生命周期和程序相同,static只在声明的类中可见。

在声明的类中结束后,再次使用还是之前的值。

在Objective-C 的语法中声明后的static静态变量在其他类中是不能通过类名直接访问的,它的作用域只能是在声明的这个.m文件中 。不过可以调用这个类的方法间接的修改这个静态变量的值

static关键字声明的变量须放在implementation外面,或者方法中,如果不为它赋值默认为0,它只在程序开机初始化一次(并不是该类实例化后才初始化的)

将static静态变量写在方法中,它的初始化也是在程序开机时,程序一旦启动以后static是不能在创建的。所以程序在这里调用了5次这个方法,sCount的值并没有因为重新创建static sCount而改变,而是将sCount的值一直存在内存中。

2)没有static 修饰的 ,在任何源文件中都可以用,注意:定义没有static的全局变量,命名一定要很独特,才能区分与其他源文件中的全局变量,如果出现跟其他源文件同名的全局变量,则会报错误

IOS <wbr>成员变量,全局变量,局部变量定义,static与extern的区别
例如:

NSString*sttr1=@"S1ViewController";//全局变量  

在其他文件如果要用该全局变量,在前面加extern NSString*sttr1;即可使用了