iOS_Runtime_OC对象在堆内存中开辟内存的大小

2024-01-26 13:08

本文主要是介绍iOS_Runtime_OC对象在堆内存中开辟内存的大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇主要介绍OC中对象在堆内存中如何开辟空间, 以及占用的内容大小.

核心API

头文件: objc/runtime.h
涉及API:

/** 函数 */
class_getInstanceSize

代码

int main(int argc, const char * argv[]) {@autoreleasepool {#pragma mark - 对象及对象的实例变量在堆中的地址/*** 定义Person类: 实例变量可见度为 @public* 详见 Person类 文件*//** 创建对象Person1, 并赋值 */Person *person1 = [[Person alloc] init];person1->_name = @"zhangsan";person1->_sex = @"male";person1->_age = 18;#pragma mark - 显示对象大小的函数/** 直接显示 对象大小 . 需要导入<objc/runtime.h> 文件 */NSLog(@"size:%ld", class_getInstanceSize([person1 class]));NSLog(@"---%d---(person1)对象和对象的实例变量在堆中的地址---", __LINE__);NSLog(@"person1      add:%p", person1);NSLog(@"person1 name add:%p", &person1->_name);NSLog(@"person1 age  add:%p", &person1->_age);NSLog(@"person1 sex  add:%p", &person1->_sex);NSLog(@"---如果实例变量类型是对象类型, 指针内容是一个指针---");NSLog(@"---%d---(person1)实例变量的指针指向的地址---", __LINE__);NSLog(@"person1 name contant :%p", person1->_name);NSLog(@"person1 sex  contant :%p", person1->_sex);NSLog(@"字符串(zhangsan)   add:%p", @"zhangsan");NSLog(@"字符串(male)       add:%p", @"male");  /**< 结论实例变量的指针最终指向了字符串常量首地址 */NSLog(@"---如果实例变量类型是非对象类型, 指针内容即为值---");NSLog(@"person1 age  contant :%ld", (long)person1->_age);NSLog(@"person1 age  contant :%ld", person1->_age);/** 创建另一个对象Person2 */Person *person2 = [[Person alloc] init];person2 = person1;NSLog(@"---%d---(person2)对象和对象的实例变量在堆中的地址---", __LINE__);NSLog(@"person2      add:%p", person2);NSLog(@"person2 name add:%p", &person2->_name);NSLog(@"person2 age  add:%p", &person2->_age);NSLog(@"person2 sex  add:%p", &person2->_sex);  /**< 结论.person2 指向了person1的首地址person2 的实例变量地址也指向person1 的实例变量首地址 */NSLog(@"---%d---(person2)实例变量的指针指向的地址---", __LINE__);NSLog(@"person2 name contant :%p", person2->_name);NSLog(@"person2 sex  contant :%p", person2->_sex);NSLog(@"字符串(zhangsan)   add:%p", @"zhangsan");NSLog(@"字符串(male)       add:%p", @"male");/* 使用copy方法创建person3 对象 */Person *person3 = [person1 copy];NSLog(@"---%d---(person3)对象和对象的实例变量在堆中的地址---", __LINE__);NSLog(@"person3      add:%p", person3);NSLog(@"person3 name add:%p", &person3->_name);NSLog(@"person3 age  add:%p", &person3->_age);NSLog(@"person3 sex  add:%p", &person3->_sex);NSLog(@"---%d---(person3)实例变量的指针指向的地址---", __LINE__);NSLog(@"person3 name contant :%p", person3->_name);NSLog(@"person3 sex  contant :%p", person3->_sex);NSLog(@"字符串(zhangsan)   add:%p", @"zhangsan");NSLog(@"字符串(male)       add:%p", @"male");}return 0;
}

这篇关于iOS_Runtime_OC对象在堆内存中开辟内存的大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/646904

相关文章

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

Java第二阶段---09类和对象---第三节 构造方法

第三节 构造方法 1.概念 构造方法是一种特殊的方法,主要用于创建对象以及完成对象的属性初始化操作。构造方法不能被对象调用。 2.语法 //[]中内容可有可无 访问修饰符 类名([参数列表]){ } 3.示例 public class Car {     //车特征(属性)     public String name;//车名   可以直接拿来用 说明它有初始值     pu

JVM内存调优原则及几种JVM内存调优方法

JVM内存调优原则及几种JVM内存调优方法 1、堆大小设置。 2、回收器选择。   1、在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。   2、对JVM内存的系统级的调优主要的目的是减少