大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?
业精于勤,荒于嬉;行成于思,毁于随。
應該沒辦法查看。 你初始化方法以 new, alloc, retain,copy 開頭都是在堆區,也包含被引用計數管理的物件。 常數這些就會在堆疊區。
簡單一點,除去 NSString *aString = @"aaa" 這種编译时会转换为常量
编译时会转换为常量
其它的 Objective-C 對象,理論上,都是在堆區.
此外,block 也是個例外,具體的可以去了解記憶體管理相關的知識點。
如何查看一個物件是在堆區還是在棧區====================當中,定義在本地的原生類型(或說值類型)。那麼肯定它是在堆疊上。當函數執行結束時直接銷毀。而其它的引用類型(或oc中的interface)都是在堆上創建的,由ARC負責清理。
let a = 1
這個時候,a字段是在堆疊上還是堆上?如果是這個問題,那麼告訴你a是在堆上,但它是個值類型。
一般情況下你可以印出地址,判斷他是在堆還是棧內存中,棧是高地址往下,堆是低地址往上,一般看到0x7fff....這種的肯定是在棧中的,要注意一點的是TEXT段,像NSString這種基本放在TEXT段中,這種地址比堆地址更低,也很好區分;你可以去看一下內存是怎麼劃分的;
應該沒辦法查看。
你初始化方法以 new, alloc, retain,copy 開頭都是在堆區,也包含被引用計數管理的物件。
常數這些就會在堆疊區。
簡單一點,除去 NSString *aString = @"aaa" 這種
编译时会转换为常量
其它的 Objective-C 對象,理論上,都是在堆區.
此外,block 也是個例外,具體的可以去了解記憶體管理相關的知識點。
如何查看一個物件是在堆區還是在棧區
我猜你想問的是 class Foo {====================當中,定義在本地的原生類型(或說值類型)。那麼肯定它是在堆疊上。當函數執行結束時直接銷毀。而其它的引用類型(或oc中的interface)都是在堆上創建的,由ARC負責清理。
這個時候,a字段是在堆疊上還是堆上?如果是這個問題,那麼告訴你a是在堆上,但它是個值類型。
值型別與在堆疊或堆上分配記憶體無關,只和傳值拷貝(隱含為不可變性)有關一般情況下你可以印出地址,判斷他是在堆還是棧內存中,棧是高地址往下,堆是低地址往上,一般看到0x7fff....這種的肯定是在棧中的,要注意一點的是TEXT段,像NSString這種基本放在TEXT段中,這種地址比堆地址更低,也很好區分;你可以去看一下內存是怎麼劃分的;