- 博客(10)
- 资源 (66)
- 问答 (3)
- 收藏
- 关注
原创 iOS之深入解析内存管理Tagged Pointer的底层原理
一、前言① Tagged Pointer 概念iOS 开发者对“引用计数”这个名词肯定不陌生,引用计数是苹果为了方便开发者管理内存而引入的一个概念。当引用计数为 0 时,对象就会被释放。但是,真的是所有对象都是这样吗?其实,内存管理方案除了常见的 MRC 和 ARC,还有以下三种:Tagged Pointer、Nonpointer_isa、SideTables。在 2013 年 9 月,苹果推出了 iPhone5s,与此同时,iPhone5s 配备了首个采用 64 位架构的 A7 双核处理器,为了
2021-05-27 20:55:15 17888 3
原创 iOS之深入解析Runloop的底层原理
一、Runloop 简介① 什么是 Runloop ?RunLoop 是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个 RunLoop 就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。Runloop 不仅仅是一个运行循环(do-while 循环),也是提供了一个入口函数的对象,消息机制处理模式,运行循环从两种不同类型的源接收事件。输入源提供异步事件,通常是来自另一个线程或来自不同应用程序的消息。定时器源提供同步事件,发生在预定时间或重复间隔。两种类型的源都使用特定于
2021-05-20 21:12:42 18256 9
原创 iOS之深入解析自动释放池autoreleasepool的底层原理
一、自动释放池 autoreleasepool 机制自动释放池是 OC 中的一种内存自动回收机制,它可以将加入 AutoreleasePool 中的变量 release 的时机延迟。简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到 runloop 休眠,超出 autoreleasepool 作用域{}之后才会被释放。自动释放池 autoreleasepool 其机制如下图所示:autore
2021-05-20 18:52:12 18462 9
原创 iOS之深入解析“锁”的底层原理
一、OSSpinLock(自旋锁)自从 OSSpinLock 出现安全问题,在 iOS10 之后就被 Apple 废弃。自旋锁之所以不安全,是因为获取锁后,线程会一直处于忙等待,造成了任务的优先级反转;其中的忙等待机制可能会造成高优先级任务一直 running 等待,占用时间片,而低优先级的任务无法抢占时间片,会造成一直不能完成,锁未释放的情况;在 OSSpinLock 被弃用后,其替代方案是内部封装 os_unfair_lock,而 os_unfair_lock 在加锁时会处于休眠状态,而不是自旋
2021-05-12 01:38:43 17927 5
原创 iOS之深入解析malloc的底层原理
一、前言iOS 在创建对象的时候,alloc 方法有三个核心部分:cls->instanceSize(计算需要开辟内存的大小),calloc(开辟内存空间),obj->initlnstanceIsa(将 cls 类和 obj 指针关联)。然而 obj = (id)calloc(1, size) 这一段代码所在位置不再是 libObjc4,它定位到了 libmalloc。malloc 的流程实质上是 iOS 对象申请内存空间实际的对齐方式是 8 字节对齐。二、malloc_zone_t
2021-05-31 13:25:27 15847 1
原创 iOS之深入解析内存管理的引用计数retainCount的底层原理
一、简介① 引用计数概念OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针。OC 在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式。在对象内部保存一个用来表示被引用计数的数字,init、new 和 copy 都会让引用计数 +1,调用 release 让引用计数 -1。当计数等于 0 的时候,系统调用 dealloc 方法来销毁对象。引用计数分为自动引用计数(ARC : Automatic Reference Counting)和手动引用计数(MRC : M
2021-05-29 20:45:18 15770 1
原创 iOS之深入解析内存管理retain与release的底层原理
一、内存管理① 内存管理原理iOS 的每个对象内部都保存了一个与之相关联的整数,称为引用计数器(auto reference count);每当使用 alloc、new 或者 copy 创建一个对象时,对象的引用计数被设置为 1;给对象发送一条 retain 消息(即调用 retain 方法),可以使引用计数 +1;给对象发送一条 release 消息,可以使引用计数 -1;当一个对象的引用计数为 0 时,那么它将被销毁,其占用的内存被系统回收,OC 会自动向对象发送一条 dealloc 消息
2021-05-29 18:42:27 26133 2
原创 iOS之深入解析内存管理MRC与ARC机制
一、内存管理① 什么是内存管理?当我们编写程序的时候,会声明各种各样的变量,编写各种各样的代码,它们都会占用内存,但是并不是所有的代码和内存都是由我们进行释放。内存分为5个区域:栈、堆、bss段、数据段、代码段。栈:存放的是局部变量,当局部变量的作用域结束的时候就会由系统进行释放局部变量所占用的内存空间;堆:存放的是程序员手动申请的变量,手动申请的变量可以由程序员手动编写代码进行释放;bss段:存放的是为初始化的全局变量和静态变量,当全局变量和静态变量进行初始化的时候系统就会回收他们所占用的
2021-05-24 21:10:09 28161 9
原创 Swift之深入解析“指针”的使用和实现
一、指针① 指针类型Swift 中的指针分为两类:typed pointer 指定数据类型指针,即 UnsafePointer,其中 T 表示泛型;raw pointer 未指定数据类型的指针(原生指针) ,即 UnsafeRawPointer。Swift 与 OC 指针对比如下:SwiftOC说明unsafePointerconst T *指针及所指向的内容都不可变unsafeMutablePointerT *指针及其所指向的内存内容均可变u
2021-05-16 19:57:32 22620 1
Objective C之Hook所有+load方法简单示例
2022-04-02
SwiftUI高级动画之路径Paths、几何效果GeometryEffect与AnimatableModifier的效果实现
2022-03-05
SwiftUI之绘制徽章视图的路径和形状
2022-01-29
SwiftUI之如何处理特定的数据和如何在视图中适配数据模型对象.zip
2021-12-20
SwiftUI之创建列表展示页和导航跳转详情页.zip
2021-12-19
SwiftUI之如何创建和组合视图.zip
2021-12-18
Python之俄罗斯方块源代码及程序.zip
2021-10-28
iOS之列表性能优化异步绘制.zip
2021-10-07
HarmonyOS之基于Service Ability的启动、停止、连接、断开连接等操作及跨设备操作.zip
2021-08-11
HarmonyOS之音乐播放器展示前台Service的使用方法.zip
2021-08-11
PageAbility.zip
2021-08-10
HarmonyOS之通过 Preferences 创建、删除、更新和查询应用程序偏好数据实现登录页面偏好数据存取及主页面背景色偏好数据存取.zip
2021-08-03
HarmonyOS之实现对象关系映射数据库的升级、备份、删除、恢复以及表的增删改查.zip
2021-08-03
HarmonyOS之基于Data Ability的关系型数据库操作方法.zip
2021-08-02
HarmonyOS之演示生物特征识别应用于设备解锁、应用登录、支付等身份认证场景.zip
2021-08-02
HarmonyOS之演示照片/视频、位置、日历、麦克风的权限申请并通过访问相关业务确认授权是否成功.zip
2021-08-02
HarmonyOS之如何使用音视频播放控制框架实现音乐播放功能.zip
2021-08-02
HarmonyOS之演示音频播放、音频采集、音量管理和短音播放等功能.zip
2021-08-02
HarmonyOS之演示如何通过相机模块相关接口实现拍照、录像等功能.zip
2021-08-02
HarmonyOS之Java UI的CustomLayout.zip
2021-08-02
HarmonyOS之演示帧动画、数值动画、属性动画和组合动画的实现.zip
2021-08-02
HarmonyOS以长列表联系人为例,演示ListContainer组件的基本使用.zip
2021-08-02
Apple 可编译 objc 源码.zip
2020-09-15
OpenGL ES之手写绘画板.zip
2020-09-09
RxSwift基本使用.zip
2020-09-04
GLSL之“大长腿”美颜效果.zip
2020-08-29
Metal之MTLBuffer批量加载顶点数量较多的图形渲染.zip
2020-08-28
Metal之基于世界坐标系下渲染三角形.zip
2020-08-26
Swift之Internationalization处理及App内切换.zip
2020-08-25
OpenEL GS滤镜处理(缩放滤镜、灵魂出窍滤镜、抖动滤镜、闪白滤镜、毛刺滤镜、幻觉滤镜).zip
2020-08-22
GLSL滤镜之马赛克.zip
2020-08-21
iOS UniApp的WCDB集成问题
2023-08-10
CSDN的markdown语法如何在表格中如何插入图片?
2021-07-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人