ios - 大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?
迷茫
迷茫 2017-04-18 09:47:36
0
3
890

大家中午好,xcode 中如何查看一个对象是在堆区还是在栈区?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(3)
黄舟

應該沒辦法查看。
你初始化方法以 new, alloc, retain,copy 開頭都是在堆區,也包含被引用計數管理的物件。
常數這些就會在堆疊區。

簡單一點,除去 NSString *aString = @"aaa" 這種编译时会转换为常量

其它的 Objective-C 對象,理論上,都是在堆區.

此外,block 也是個例外,具體的可以去了解記憶體管理相關的知識點。

巴扎黑

如何查看一個物件是在堆區還是在棧區
====================當中,定義在本地的原生類型(或說值類型)。那麼肯定它是在堆疊上。當函數執行結束時直接銷毀。而其它的引用類型(或oc中的interface)都是在堆上創建的,由ARC負責清理。

我猜你想問的是 class Foo {

let a = 1
}

這個時候,a字段是在堆疊上還是堆上?如果是這個問題,那麼告訴你a是在堆上,但它是個值類型。

值型別與在堆疊或堆上分配記憶體無關,只和傳值拷貝(隱含為不可變性)有關

Peter_Zhu

一般情況下你可以印出地址,判斷他是在堆還是棧內存中,棧是高地址往下,堆是低地址往上,一般看到0x7fff....這種的肯定是在棧中的,要注意一點的是TEXT段,像NSS​​tring這種基本放在TEXT段中,這種地址比堆地址更低,也很好區分;你可以去看一下內存是怎麼劃分的;

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板