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获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取