iOS 屬性學習筆記

躍然發表於2016-03-12

一、記憶體相關

1、記憶體分割槽:
不需要程式設計師管理 基本資料型別(struct enum int double float char等)不需要 儲存在棧區
--------
棧區
--------
需要程式設計師管理 NSObject物件儲存堆區 
--------
堆區 
--------
自動載入記憶體空間 不需要程式設計師管理
-------
BSS段 沒有初始化的全域性變數 靜態變數
資料區
程式碼區
--------
全域性變數存在資料區和BSS段 記憶體 開機啟動比較慢

2. 野指標
 記憶體管理內容
 1)野指標: 1.定義的指標變數沒有初始化 2.指向的空間已經被釋放
 2)記憶體洩露

   Person *p = [Person new];
   p在棧區 
   [Person new];堆區

   如果棧區的p已經釋放,而堆區的空間還沒有釋放,堆區的空間洩露了

3.記憶體釋放後 設定物件為nil 可避免殭屍物件

二、記憶體管理

如何回收那些不需要再使用的物件?
那就得學會OC的記憶體管理

所謂記憶體管理, 就是對記憶體進行管理, 涉及的操作有:
分配記憶體 : 比如建立一個物件, 會增加記憶體佔用
清除記憶體 : 比如銷燬一個物件, 能減小記憶體佔用

記憶體管理的管理範圍
任何繼承了NSObject的物件 (所有的OC物件,物件型別)
對其他非物件型別(基本資料型別)無效(intcharfloatdoublestructenum等 )

只有OC物件才需要進行記憶體管理的本質原因
OC物件存放於堆裡面
非OC物件一般放在棧裡面(棧記憶體會被系統自動回收)

三、基本資料型別 VS 物件型別

1.為什麼基本資料型別可以放在“棧”中儲存?“物件型別”卻要放在堆中儲存?
基本資料型別:大小固定
物件資料型別:大小不固定
2.為什麼記憶體管理只管理“物件型別”?
程式碼執行完畢後,“堆記憶體”不會自動銷燬,而“棧”記憶體會自動彈棧(釋放)。

四、一些截圖

1.png

2.png

3.png

4.png

5.png

相關文章