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

 ALI韩帅该 发布于 2022-10-28 01:11

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

3 个回答
  • 一般情况下你可以打印出地址,判断他是在堆还是栈内存中,栈是高地址往下,堆是低地址往上,一般看到0x7fff....这种的肯定是是在栈中的,要注意一点的是TEXT段,像NSString这种基本放在TEXT段中,这种地址比堆地址更低,也很好区分;你可以去看一下内存是怎么划分的;

    2022-10-29 07:40 回答
  • 如何查看一个对象是在堆区还是在栈区
    ====================
    你这个问题问的就比较模糊,如果是在方法执行过程当中,定义在本地的原生类型(或者说值类型)。那么肯定它是在栈上。当函数执行结束时直接销毁。而其它的引用类型(或者oc中的interface)都是在堆上创建的,由ARC负责清理。

    我猜你想问的是 class Foo {

    let a = 1

    }
    这个时候,a字段是在栈上还是堆上?如果是这个问题,那么告诉你a是在堆上,但它是个值类型。

    值类型与在栈还是堆上分配内存无关,只和传值拷贝(隐含为不可变性)有关

    2022-10-29 07:51 回答
  • 应该没法查看。
    你初始化方法以 new, alloc, retain,copy 开头都是在堆区,也包括被引用计数管理的对象。
    常量这些就会在栈区。

    简单一点,除去 NSString *aString = @"aaa" 这种编译时会转换为常量

    其它的 Objective-C 对象,理论上来说,都是在堆区.

    此外,block 也是个例外,具体的可以去了解内存管理相关的知识点。

    2022-10-29 07:52 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有