來來回回遇到一些問題,每次遇到都去找下資料,有時候還就想找到以前看過的某篇文章,然而就是找不到,很苦逼啊,于是還是開始自己理解記錄下吧,好記性不如爛筆頭真的說得好啊!
首先關(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
參考這個知乎