2021年4月9日
摘要: iOS中的几种常用架构 MVC 是以 三者之间的关系来依赖的 Apple版的MVC 最早的 的数据流向是以 为中心,在 和`View Controller Model、View`之间的数据流向都是双向的 例如, 上通过按钮的点击传递给 ,`Controller Model Model Control 阅读全文
posted @ 2021-04-09 05:07 FunkyRay 阅读(572) 评论(0) 推荐(0) 编辑
摘要: iOS中的卡顿优化 iOS中的屏幕成像原理 在讲解卡顿优化之前,我们先来思考一下,在iOS中,屏幕是怎么成像的呢 CPU和GPU 在屏幕成像的过程中, 和`GPU`起着至关重要的作用 CPU(Central Processing Unit,中央处理器) CPU的主要任务是进行对象的创建和销毁、对象属 阅读全文
posted @ 2021-04-09 05:06 FunkyRay 阅读(798) 评论(0) 推荐(0) 编辑
摘要: weak指针 我们通常会使用 来对变量进行弱引用,被 修饰的变量一旦被释放,会自动置为 的作用也是将变量变成弱指针,但是不同于 的原因是修饰的变量释放后并不会置为 weak的实现原理 我们可以在 的实现中找到关于弱引用的处理 根据调用轨迹`dealloc _objc_rootDealloc root 阅读全文
posted @ 2021-04-09 05:05 FunkyRay 阅读(296) 评论(0) 推荐(0) 编辑
摘要: iOS程序的内存布局 iOS程序的内存布局顺序如以下所示 我们可以通过打印内存地址来验证 经过排序的内存地址大小如下 注意: 字符串常量严格来说应该是存储在 ,只是我们习惯把他归于数据段 OC对象的一些特殊类型的内存管理 从 开始,iOS引入了 技术,用于优化 等小对象的存储 Tagged Poin 阅读全文
posted @ 2021-04-09 05:04 FunkyRay 阅读(335) 评论(0) 推荐(0) 编辑
  2021年4月8日
摘要: iOS中的读写安全 atomic 用于保证属性 的原子性操作,相当于在 内部加了线程同步的锁 原子性:原子即为最小的物理单位,意味不可再分割;即代码都为一个整体在同一线程进行操作 只是保证 是线程安全的,并不能保证使用属性的过程是线程安全的 从源码分析 对于 的使用 我们在 中的 中找到对应的 的实 阅读全文
posted @ 2021-04-08 14:46 FunkyRay 阅读(298) 评论(0) 推荐(0) 编辑
摘要: 多线程的安全隐患 一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源;当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 问题案例 卖票和存钱取钱的两个案例,具体见下面代码 static的问题 上面的 也可以用 来修饰作为内部静态变量来使用 由于 就是0,所以才可以用 来修饰 阅读全文
posted @ 2021-04-08 14:45 FunkyRay 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 基本概念 进程和线程 进程:进程是指在系统中正在运行的一个应用程序 线程:1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 一个进程(程序)的所有任务都在线程中执行 1个线程中任务的执行是串行的 进程和线程的比较 线程是CPU调用(执行任务)的最小单位 进程是CPU分配资源和调度的单 阅读全文
posted @ 2021-04-08 14:35 FunkyRay 阅读(297) 评论(0) 推荐(0) 编辑
  2021年4月7日
摘要: 什么是RunLoop 从字面意思来看,就是运行循环的意思,其实就是在程序运行过程中循环做一些事情 RunLoop的应用范畴 下面几个技术都需要在 下才能进行 定时器(Timer)、PerformSelector GCD Async Main Queue 事件响应、手势识别、界面刷新 网络请求 Aut 阅读全文
posted @ 2021-04-07 17:32 FunkyRay 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 什么是Runtime 是一门动态性比较强的编程语言,跟 等语言有着很大的不同; 的动态性是由 来支撑的 提供的接口基本都是 的,源码由 编写 方法类型的底层结构 在 的底层结构 中,我们知道通过 就可以得到 类型的表结构 里面的 都是二维数组, 是可读可写的 ,包含了类的初始内容、分类的内容 以 举 阅读全文
posted @ 2021-04-07 14:43 FunkyRay 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 动态方法解析 如果消息发送阶段不成功,那么就会进入到 【第一步】 我们还是先从 里找到函数 来看,分别对应着类对象和元类对象做了不同的调用处理 注意: 能调用到这里,说明已经找到基类的元类对象了,如果还是没有,那么就会去基类的类对象里找同名的对象方法,正好印证了之前分析的元类对象的 指向类对象的原理 阅读全文
posted @ 2021-04-07 14:43 FunkyRay 阅读(230) 评论(0) 推荐(0) 编辑