论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
移动端开发
›
IOS
›
APP内存管理
APP内存管理
王國慶
金牌会员
|
2022-6-23 16:02:30
|
显示全部楼层
|
阅读模式
楼主
主题
795
|
帖子
795
|
积分
2389
文章目录
1、iOS程序的内存布局
2、Tagged Pointer 标记指针
问答拓展
3、定时器
3.1、NSTimer、CADisplayLink的使用注意点
3.2、GCD定时器封装
4、OC对象的内存管理
4.1、引用计数的存储
4.2、dealloc
4.3、自动释放池
4.3.1、autorelease 底层结构
4.3.2、AutoreleasePoolPage
1、链表关系
2、实现原理
3、触发逻辑
5、问答拓展
1、iOS程序的内存布局
1、
代码段
:编译之后的代码
2、
数据段
2.1、
字符串常量
:比如NSString *str = @“123”
2.2、
已初始化数据
:已初始化的全局变量、静态变量等
2.3、
未初始化数据
:未初始化的全局变量、静态变量等
3、
堆
:通过alloc、malloc、calloc等动态分配的空间,分配的内存空间地址越来越大
4、
栈
:函数调用开销,比如局部变量。分配的内存空间地址越来越小
2、Tagged Pointer 标记指针
1、从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储.
2、在没有使用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引用计数等,NSNumber指针存储的是堆中NSNumber对象的地址值。使用Tagged Pointer之后,NSNumber指针里面存储的数据变成了:Tag + Data,也就是将数据直接存储在了指针中。(Tagged Pointer指针的值不再是地址了,而是真正的值。所以,实际上它不再是一个对象了,它只是一个披着对象皮的普通变量而已。所以,它的内存并不存储在堆中,也不需要 malloc 和 free。)
3、当指针不够存储数据时,才会使用动态分配内存的方式来存储数据。
4、objc_msgSend能识别Tagged Pointer,比如NSNumber的intValue方法,直接从指针提取数据,节省了以前的调用开销。
5、在内存读取上有着 3 倍的效率,创建时比以前快 106 倍。
优点:
1、减少了 64 位机器下程序的内存占用,还提高了运行效率。完美地解决了小内存对象在存储和访问效率上的问题。
弊病:
1、因为并不是真正的对象,而是一个伪对象,是没有isa指针的。
2、因为不是真正的对象,所以如果你直接访问Tagged Pointer的isa成员的话,在编译时将会得到警告。这时我们只要避免在代码中直接访问对象的 isa 变量,即可避免这个问题。
判断是否为Tagged Pointer:
1、iOS平台,最高有效位是1(第64bit)
2、Mac平台,最低有效位是1
[code]#if TARGET_OS_OSX & __x86_64__ //64-bit Mac tag bit is LSB# define OBJC_MSB_TAGGED_POINTERS 0#else //Everything else tag bit is MSB# define OBJC_MSB_TAGGED_POINTERS 1#endif#if OBJC_MSB_TAGGED_POINTERS# define _OBJC_TAG_MASK (1UL
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
金牌会员
这个人很懒什么都没写!
楼主热帖
webman
React技巧之发出http请求
Jupyter Notebook,太强大了
【Shashlik.EventBus】.NET 事件总线, ...
导入例子体验鸿蒙开发工具的hello worl ...
Bluecmsv1.6-代码审计
手记系列之四 ----- 关于使用MySql的经 ...
【云原生架构】阿里云 —— 主要架构模 ...
【网络】https单向认证和双向认证 ...
2022-08-16 数据库查询语言之-------D ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表