堆區

 1.因爲棧區中的空間有限,iOS的應用程序中,對象都是創建在堆中的
2.堆區包括系統內存和虛擬內存(硬盤緩存),由全部正在運行的應用程序共享使用
3.堆區中的內存分配由操做系統負責,操做系統使用一個鏈表統一維護全部已經分配的內存記錄
4.因爲堆區是由全部應用程序共享的,操做系統以匿名(只記錄內存地址和大小,不記錄具體類型)的方式記錄已經分配的內存區域
5.要訪問堆區中的數據,必須經過指針的方式才能夠進行,指針的類型決定了訪問堆中數據的方式
6.當某一內存區域再也不使用時,程序須要通知操做系統回收該內存區域,從而能夠保證該內存區域被其餘程序再次使用,不然,該區域將永遠沒法被再次分配,這就是傳說中的「內存泄露」
7.若是某一區域已經被釋放,仍然視圖訪問該區域,會提示「壞內存訪問」,這就是傳說中的「野指針訪問」
8.相比較棧區,堆區中的效率要低不少,同時容易出現內存碎片
9.相比較棧區,堆區中的訪問方式更加靈活,對象佔用的內存也能夠更大swift

           

   改               緩存

 

         // swift自動推斷 var p = Person()
        // 在堆中全部的變量類型都是匿名訪問的
        // 可否訪問對象的屬性,或者調用方法,"取決於指定變量的類型,指針變量的真實類型由右邊指向的對象所決定"
        // 全部堆中的變量都是經過指針來訪問的
        id p = [[Person alloc] init];
        [p setName:@"zhangsan"];
       
        NSLog(@"%@ %p", [p name], p);
       
        // 1. 將p指向 NULL(地址) => 0
        // 2. 釋放p
        // ** 在OC/C++中,nil能夠調用任何的方法,都不會報錯
        // nil是指針指向NULL的空對象 0
        p = nil;
       
        NSString *str = p;
        NSLog(@"%ld %p", str.length, p);操作系統

相關文章
相關標籤/搜索