*全局變量的做用域僅限於當前文件內部,防止重命名,其餘文件沒法訪問框架
***局部變量的生命週期,與全局變量相似函數
*可是不能改變做用域spa
*能保證局部變量永遠只初始化一次指針
- (void)vieDidLoad{ for (int i = 0; i < 5; i++) { [self test]; } } - (void)test{ static int a = 1; a++; NSLog(@"%d",a); } //NSLog結果爲 2,3,4,5,6 - (void)test1{ int a = 1; a++; NSLog(@"%d",a); } //NSLog結果爲 2,2,2,2,2 由於每次調用test1,a都從新初始化
static在c裏面能夠用來修飾變量,也能夠用來修飾函數。 先看用來修飾變量的時候。變量在c裏面可分爲存在全局數據區、棧和堆裏。其 int a ; int main() { int b ; int c* = (int *)malloc(sizeof(int)); }
a是全局變量,b是棧變量,c是堆變量。
static對全局變量的修飾,能夠認爲是限制了只能是本文件引用此變量。有的程序是由好多.c文件構成。彼此能夠互相引用變量,但加入static修飾以後,只能被本文件中函數引用此變量。
static對棧變量的修飾,能夠認爲棧變量的生命週期延長到程序執行結束時。通常來講,棧變量的生命週期由OS管理,在退棧的過程當中,棧變量的生命也就結束了。但加入static修飾以後,變量已經再也不存儲在棧中,而是和全局變量一塊兒存儲。同時,離開定義它的函數後不能使用,但如再次調用定義它的函數時,它又可繼續使用, 並且保存了前次被調用後留下的值。
static對函數的修飾與對全局變量的修飾類似,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用。code
*但不能訪問前綴有static的全局變量orm
extern NSString *const age = @"12";生命週期
基礎用法: const int num = 40; 限定num不可變內存
其餘用法:含有指針作用域
int * const p3 = &age; //這種寫法能夠歸類爲const在指針以後 //修改p3指針指向的內存地址(本來指向age的內存地址,如今指向常量40的內存地址) *p3 = 40; /* ==========錯誤寫法============ p3 = 30; 由於const在*以後,因此它是修飾變量,變量不可變 */
int age = 20; const int *p1 = &age; //這兩種寫法都是同樣,能夠歸類爲const在指針以前 int const *p2 = &age; //不能經過指針間接修改變量的值 int num = 30; //簡單的變量賦值 p1 = # p2 = # /* ==========錯誤寫法============ *p1 = 40; *p2 = 40; 由於const在*以前,因此它是修飾指針,指針不可變 */
1.const和define的值都是不可變。
2.使用宏和const的好處是減小臨時內存。
例如須要打印輸出2個20的操做,這個時候就有2份臨時內存。而打印2個define的,卻只會有1份
3.define宏是編譯前就處理,而const是用到那個變量才編譯。
4.const只能修飾常量,字面量的值,不能含有方法。而宏就能夠修飾函數方法
5.當某個文件定義了全局變量的時候int *const Appkey = 20; 其餘m文件不能再次定義相同的全局變量,不然會出現連接錯誤。因此只能使用引用extern訪問外部全局變量extern int *const Appkey;但如此的話太過麻煩。由於某個文件時候就要寫重複代碼extern引用.
解決辦法:
新建一個cocoa class.在.m文件中 只保留#import <Foundation/Foundation.h>(由於用到NSString等這些須要用到這個框架)和const語句.在h文件中,也是隻保留#import <Foundation/Foundation.h>和extern語句,如此其餘類須要用到的時候,只須要引用該.h文件便可,和不須要import任何.h,包括本身的.
it
例子:在const.h中: #import <Foundation/Foundation.h> extern NSString * const HWAppKey; 在const.m中: #import <Foundation/Foundation.h> NSString * const HWAppKey = @"3235932662";
6.咱們應該多使用const,少使用宏,由於蘋果官方都大量使用了const來代替define