搜尋

首頁  >  問答  >  主體

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

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

迷茫迷茫2824 天前918

全部回覆(3)我來回復

  • 黄舟

    黄舟2017-04-18 09:49:36

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

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

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

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

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:49:36

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

    我猜你想問的是 class Foo {

    let a = 1

    }

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

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:49:36

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

    回覆
    0
  • 取消回覆