外部變量,可置于變量或函數前,作用域是整個項目
注意: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); } @end 2.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右邊是誰,則誰就不可變
新聞熱點
疑難解答