static、const

時常在單例模式中看到static關鍵字,不明就裏照搬總歸無法理解其中的奧義,今天又寫到單例決心已定要明白static的道理於是查看文檔,如下:

static關鍵字

前面的局部變量通常都在每次程序進入該局部變量的作用域時分配並在離開時釋放。這類存儲稱爲自動存儲(默認關鍵字auto)。

static關鍵字會在聲明變量的時候分配內存,在程序運行期間只分配一次內存。之後再訪問時,實際都是在訪問原先分配的內存。這適合用於存儲創建時使用大量的資源,並且不常改變的局部變量。


void func() {
    static Expensive * p = [[Expensive alloc] init];
    [p doSomeOp];
}
int main(int argc, const char * argv[])
{
    func(); // 第一次調用時創建 p
    func(); // 第二次調用,此時p已存在,不會再次創建
    return 0;
}

因爲全局變量默認位於全局作用域中,所以其行爲和靜態變量一樣。也就是說,它們只分配一次內存,並在整個程序運行期間保持不變。

const關鍵字

const同樣會修改所聲明變量的內存行爲,它所修飾的變量是隻讀的,即第一次初始化後它的值將不能改變。通常用來聲明常量

#import <Foundation/Foundation.h>
 
int main(int argc, const char * argv[])
{  
    const NSString *str = @"BeiJing";
    str = @"ShangHai"// 會產生一個編譯錯誤
    NSLog(@"dd, %@", str);
    return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章