![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IOS-内存管理
文章平均质量分 74
low-profile
这个作者很懒,什么都没留下…
展开
-
OC底层原理-Block
对于block,在日常开发中经常会用到,但有时候会出现一些奇奇怪怪的问题,比如block的里面值没更新上,又比如block里面要改变一个外部变量的值,就得加上__block,不然编译器就会报错。 那么,这次就来一次过搞清楚block背后不为人知的真相。 Block的基本结构 void blockTest() { void (^block)(void) = ^{ NSLog(@"Hello World!"); }; block(); } int main(int a原创 2022-01-04 23:19:08 · 1398 阅读 · 0 评论 -
内存对齐原理
字节对齐算法 先了解一下字节对齐算法 static inline size_t word_align(size_t x) { return (x + WORD_MASK) & ~WORD_MASK; } 以传入的参数为11为例,先来计算一下结果 (11+ 7)& ~7 = (00001011 + 000001111) & (11111000) = 00010010 & 11111000 = 00010000 = 16 ...原创 2021-12-07 00:03:48 · 220 阅读 · 0 评论 -
OC底层原理-alloc流程
alloc流程分析 可以通过opensource下载objc4来查看alloc的源码,这里用objc4-818版本来分析 1.alloc + (id)alloc { return _objc_rootAlloc(self); } 2.objc_alloc id objc_alloc(Class cls) { return callAlloc(cls, true/*checkNil*/, false/*allocWithZone*/); } 3.callAlloc static ALWAY原创 2021-11-13 18:33:04 · 1596 阅读 · 0 评论 -
ios内存概述
iOS内存管理 在iOS中内存分为五大区域:栈去、堆区、全局区、常量区、代码区 栈内存 1、高地址向低地址扩展。 2、一块连续的内存区域,遵循先进后出的原则。 3、运行时分配,在iOS中以0x7开头 4、由编译器自动分配并释放 5、局部变量、函数参数 堆内存 1、低地址向高地址扩展 2、不连续的内存区域,类似于链表,遵循先进先出的原则。 3、运行时分配的,在iOS中以0x6开头 4、程序员动态分配和释放的 5、访问堆中内存时,一般需要通过对象读取到栈区的指针地址,然后通过指针地址访问堆区 全局区原创 2021-09-05 22:46:12 · 293 阅读 · 0 评论