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

相关文章

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

最新Spring Security的基于内存用户认证方式

《最新SpringSecurity的基于内存用户认证方式》本文讲解SpringSecurity内存认证配置,适用于开发、测试等场景,通过代码创建用户及权限管理,支持密码加密,虽简单但不持久化,生产环... 目录1. 前言2. 因何选择内存认证?3. 基础配置实战❶ 创建Spring Security配置文件

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.