iOS 堆和棧

堆和棧

全局(靜態(tài))區(qū)

存放程序靜態(tài)分配的變量和全局變量。

棧區(qū)(stack)?

由編譯器自動分配并釋放

存放函數(shù)的參數(shù)值,局部變量等

當(dāng)一個方法執(zhí)行時,會建立自己的內(nèi)存棧,在這方法內(nèi)定義的變量,局部變量將會逐個放入這塊棧內(nèi)存里,隨著方法的執(zhí)行結(jié)束,這個方法的內(nèi)存棧也將自然銷毀。

棧一般來說都是一個先進后出的隊列,后進入的數(shù)據(jù),會被先釋放掉.棧區(qū)存放函數(shù)內(nèi)的局部變量,形參和函數(shù)返回值.棧區(qū)的內(nèi)存由系統(tǒng)自動管理釋放,內(nèi)存的分配是連續(xù)的,且分配的內(nèi)存地址是向下增長.申明的變量過了作用域范圍后內(nèi)存便會自動釋放,不需要開發(fā)人員手動管理.

堆區(qū)(heap)?

大部分自定義的類都在堆中

比如在ios 中 alloc 都是存放在堆中。

在程序中創(chuàng)建一個對象時,這個對象將被保存到運行時數(shù)據(jù)區(qū)中,以便反復(fù)利用(因為對象的創(chuàng)建成本通常較大),這個運行時數(shù)據(jù)區(qū)就是堆內(nèi)存。

堆內(nèi)存中的對象不會隨方法的結(jié)束而銷毀,即使方法結(jié)束后,這個對象還可能被另一個引用變量所引用(在方法的參數(shù)傳遞時很常見),則這個對象依然不會被銷毀。只有當(dāng)一個對象沒有任何引用變量指向它時,系統(tǒng)的垃圾回收器才會在合適的時候回收它。

iOS中數(shù)據(jù)是存在堆和棧中的,然而我們的內(nèi)存管理管理的堆上的內(nèi)存,棧上的內(nèi)存并不是我們管理

非OC對象(基礎(chǔ)數(shù)據(jù)類型)存儲在棧上

OC對象存儲在堆上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容