外部变量,可置于变量或函数前,作用域是整个项目
注意:extern只能声明,不能用于实现。
#import <UIKit/UIKit.h> @interface Data :NSObject extern NSString *const name; @end #import "Data.h" @implentment Data NSString *const name=@"洋洋"; @end#import <UIKit/UIKit.h> @interface ViewController :UIViewController @end #import "ViewController.h" @implementation ViewController -(void)viewDidLoad { NSLog(@"%@",name); } @end2.static
内部变量(静态变量)
a.修饰全局变量,作用域仅限于当前文件内部作用:static定义的全局变量,extern引用也获取不到其值b.修饰局部变量作用:某个函数调用频率比较高并且某个变量值固定不变可以使用保证局部变量永远只初始化一次,直到程序销毁时才释放,即为该变量分配的空间在整个程序的执行期内都始终存在
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { int i=0; i++; NSLog(@"%d",i); } 2017-02-07 15:41:35.415 WeChat[3107:167112] 12017-02-07 15:41:35.909 WeChat[3107:167112] 12017-02-07 15:41:36.317 WeChat[3107:167112] 12017-02-07 15:41:36.549 WeChat[3107:167112] 1从输出日志中我们可以看到i一直等于1,因为每次点击进入这个方法就会重新初始化一个全新的变量i = 0,加了一次后值变为1,然后打印出结果为1,出了这个方法后局部变量i就被释放回收,所以每次打印出来的结果都为1。-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { static int i=0; i++; NSLog(@"%d",i); }2017-02-07 15:42:39.754 WeChat[3122:168278] 1
2017-02-07 15:42:40.360 WeChat[3122:168278] 22017-02-07 15:42:40.808 WeChat[3122:168278] 32017-02-07 15:42:41.208 WeChat[3122:168278] 4上面日志中可以看到i的值一直在自增,这就是关键字static修饰的局部变量的作用,让局部变量永远只初始化一次,一份内存,生命周期已经跟全局变量类似了,只是作用域不变。
3.const
a.const用来修饰右边的基本变量或指针变量b.被修饰的变量只读,不能被修改 int const *p //*p只读,p变量 int *const p //p只读,*p变量 const int *p //*p和p都只读 int const *const p //*p和p都只读 const右边是谁,则谁就不可变
新闻热点
疑难解答