關(guān)于堆棧的區(qū)別(Java)iOS應(yīng)該也差不多

來來回回遇到一些問題,每次遇到都去找下資料,有時候還就想找到以前看過的某篇文章,然而就是找不到,很苦逼啊,于是還是開始自己理解記錄下吧,好記性不如爛筆頭真的說得好啊!

首先關(guān)于iOS中的堆棧問題:

1.堆棧是跟內(nèi)存有關(guān)的,那么對于移動設(shè)備而言,內(nèi)存是有限的,一下行為都會增加內(nèi)存

  • 創(chuàng)建一個OC對象
  • 定義一個變量
  • 調(diào)用一個函數(shù)或者方法

2.但是呢,內(nèi)存對這些的管理方式是不一樣的

  • 只有OC對象需要進(jìn)行內(nèi)存管理
  • 非oc對象類型比如基本數(shù)據(jù)類型不需要進(jìn)行內(nèi)存管理

3.在OC

  • OC對象存放于堆里面(堆內(nèi)存要程序員手動回收)
  • 非OC對象一般放在棧里面(棧內(nèi)存會被系統(tǒng)自動回收)
    堆里面的內(nèi)存是動態(tài)分配的,所以也就需要程序員手動的去添加內(nèi)存、回收內(nèi)存
接下來是Java中堆棧的問題
  • java內(nèi)存是分為堆,棧和方法區(qū)。
  • 堆中分配的是對象,也就是new出來的東西。
  • 棧中分配的是基本類型和自定義對象的引用。
  • 方法區(qū)存放的是類信息和static變量。比如說你在方法里有一個String a=new String("123"),就會先在堆里創(chuàng)建一個“123”的對象,然后再把這個對象的引用放到棧里面。

舉個例子:

public void Method1()
{
    int i = 4;
    int y = 2;
    class1 cls1 = new class1();
}

內(nèi)存分配是這樣的:

11.jpg

參考這個知乎

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,242評論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,658評論 1 32
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,622評論 30 472
  • 前言 不知道大家有沒有這樣一種感覺,程序員的數(shù)量井噴了??赡苁且驗榛ヂ?lián)網(wǎng)火了,也可能是各家培訓(xùn)機(jī)構(gòu)為我們拉來了大量...
    活這么大就沒飽過閱讀 2,844評論 6 25
  • 無知使我喪失了斗志 即使是這樣我也不會放棄 每當(dāng)我郁郁不得志 當(dāng)我找不到存在的意義 我都會自我淫意 我要萬人擁我而...
    且把詩詞抵酒債閱讀 235評論 0 0

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