首页
首页
BOT
沸点
课程
直播
活动
AI刷题
NEW
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
oc 底层原理分析
毛毛虫Coder
创建于2021-05-13
订阅专栏
主要从oc 的角度分析iOS 底层原理知识
等 6 人订阅
共51篇文章
创建于2021-05-13
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
OC-底层原理-39-组件化(二)组件间通讯方式
这些动态化的方案的优点是实现简单,缺点是需要维护字符串表,或者依赖于命名约定,无法在编译时暴露出所有问题,需要在运行时才能发现错误。 当组件A需要调用组件B时,向ModuleManager传递URL,参数跟随URL以GET方式传递,类似openURL。然后由ModuleMana…
OC-底层原理-38-组件化(一)方案
当项目因为各种需求,越来越来时,如果此时的各个模块之间是互相调用,即你中有我,我中有你这种情况时,会造成高耦合的情况。一旦我们需要对某一块代码进行修改时,就会牵一发而动全身,导致项目难以维护 1、修改某个功能时,同时需要修改其他模块的代码,因为在其他模块中有该模块的引用。可以理…
OC-底层原理-37-界面优化方案
最开始时,FrameBuffer只有一个,这种情况下FrameBuffer的读取和刷新有很大的效率问题,为了解决这个问题,引入了双缓存区。即双缓冲机制。在这种情况下,GPU会预先渲染好一帧放入FrameBuffer,让视频控制器读取,当下一帧渲染好后,GPU会直接将视频控制器的…
OC-底层原理-36-内存管理(三)AutoReleasePool-&-NSRunLoop-底层分析
自动释放池是OC中的一种内存自动回收机制,它可以将加入AutoreleasePool中的变量release的时机延迟,简单来说,就是当创建一个对象,在正常情况下,变量会在超出其作用域的时立即release。如果将对象加入到了自动释放池中,这个对象并不会立即释放,会等到runlo…
OC-底层原理-34-内存管理(二)强引用分析
假设此时有两个界面A、B,从A push 到B界面,在B界面中有如下定时器代码。当从B pop回到A界面时,发现定时器没有停止,其方法仍然在执行,为什么? 现在,我们从底层来深入研究,为什么B界面有了timer之后,导致B界面释放不掉,即不会走到dealloc方法。我们可以通过…
OC-底层原理-33-内存管理(一)TaggedPointer-retain-release-dealloc-retainCount
ARC模式是在WWDC2011和iOS5引入的自动管理机制,即自动引用计数。是编译器的一种特性。其规则与MRC一致,区别在于,ARC模式下不需要手动retain、release、autorelease。编译器会在适当的位置插入release和autorelease。 我们在OC…
OC-底层原理-32-启动优化(三)二进制重排
前提,在之前的两篇文章中,大致介绍了一些基本概念以及启动优化的思路,下面来着重介绍一个pre-main阶段的优化方案,即二进制重排,这个方案最开始是由于抖音的这篇文章抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%火起来的。 在虚拟内存部分,我们知道,当进…
OC-底层原理-31-启动优化(二)优化建议
在OC底层原理 14:dyld加载流程中,已经了解过了dyld的加载流程。pre-main阶段的启动时间其实就是dyld加载过程的时间 rebase(偏移修正):任何一个app生成的二进制文件,在二进制文件内部所有的方法、函数调用,都有一个地址,这个地址是在当前二进制文件中的偏…
OC-底层原理-30:启动优化(一)基本概念
针对问题1,我们在进程和物理内存之间增加一个中间层,这个中间层就是所谓的虚拟内存,主要用于解决当多个进程同时存在时,对物理内存的管理。提高了CPU的利用率,使多个进程可以同时、按需加载。所以虚拟内存其本质就是一张虚拟地址和物理地址对应关系的映射表 每个进程都有一个独立的虚拟内存…
OC-底层原理-29-LLVM编译流程-&-Clang插件开发
LLVM是架构编译器的框架系统,以C++编写而成,用于优化任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)。对开发者保持开放,并兼容已有脚本 下面分别针对上述流程来解释,…
OC-底层原理-28-GCD-之-NSThread-&-GCD-&-NSOperation
NSthread是苹果官方提供面向对象的线程操作技术,是对thread的上层封装,比较偏向于底层。简单方便,可以直接操作线程对象,使用频率较少。 等栅栏前追加到队列中的任务执行完毕后,再将栅栏后的任务追加到队列中。 dispatch_semaphore_wait():等待信号量…
OC-底层原理-27-Block底层原理
循环引用:A、B相互持有,所以导致A无法调用dealloc方法给B发送release信号,而B也无法接收到release信号。所以A、B此时都无法释放 代码一种发生了循环引用,因为在block内部使用了外部变量name,导致block持有了self,而self原本是持有bloc…
OC-底层原理-26-锁的原理
【1、自旋锁】:在自旋锁中,线程会反复检查变量是否可用。由于线程这个过程中一致保持执行,所以是一种忙等待。 一旦获取了自旋锁,线程就会一直保持该锁,直到显式释放自旋锁。自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。对于iOS属性的修饰符atomi…
OC-底层原理-25:GCD-之-底层原理分析
进入_dispatch_root_queues_init源码实现,发现是一个dispatch_once_f单例(请查看后续单例的底层分析们,这里不作说明),其中传入的func是_dispatch_root_queues_init_once。 从实现中可以看出,是先将任务push…
OC-底层原理-25-GCD-之-底层原理分析
进入_dispatch_root_queues_init源码实现,发现是一个dispatch_once_f单例(请查看后续单例的底层分析们,这里不作说明),其中传入的func是_dispatch_root_queues_init_once。 从实现中可以看出,是先将任务push…
OC-底层原理-24:GCD-之-函数与队列
多线程中所说的队列(Dispatch Queue)是指执行任务的等待队列,即用来存放任务的队列。队列是一种特殊的线性表,遵循先进先出(FIFO)原则,即新任务总是被插入到队尾,而任务的读取从队首开始读取。每读取一个任务,则动队列中释放一个任务,如下图所示 【修改2】:在任务5之…
OC-底层原理-23:多线程原理
所以,可以简单的理解为:进程是线程的容器,而线程用来执行任务。在iOS中是单进程开发,一个进程就是一个app,进程之间是相互独立的,如支付宝、微信、qq等,这些都是属于不同的进程 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。 但是 线程不能独立…
OC-底层原理-22:内存五大区
在iOS中,内存主要分为栈区、堆区、全局区、常量区、代码区五大区域。如下图所示 内存主要分为栈区、堆区、全局区、常量区、代码区五大区域。
OC-底层原理-21:KVO-底层原理
KVO,全称为Key-Value observing,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属性的更改通知给对象。 2、NSNotification的发送监听(post)的操作我们可以控制,kvo由系统控制。 大致含义就是:addObserver:forKe…
OC-底层原理-20:KVC-底层原理
KVC的全称是Key-Value Coding,翻译成中文是 键值编码,键值编码是由NSKeyValueCoding非正式协议启用的一种机制,对象采用该协议来间接访问其属性。既可以通过一个字符串key来访问某个属性。这种间接访问机制补充了实例变量及其相关的访问器方法所提供的直接…
下一页