2021年2月18日
优化
一、图片加载(解压缩)原理1、图片加载的工作流概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下:
(1) 将 UIImage 赋值给屏幕上 UIImageView;
(2) Core Animation 渲染流水线被触发;
(3) Core Animation 渲染 ...
阅读全文
2021年2月12日
优化
底层
一、图像渲染原理1、iOS 双缓冲机制图像的渲染离不开 CPU 和 GPU 的协作:CPU(Central Processing Unit,中央处理器)
对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics)
GPU( ...
阅读全文
2020年9月12日
底层
一、WKWebView1、WebKitWebKit 是 Safari 浏览器的内核,WebKit 由多个重要模块组成:
WebKit Embedding API(WebKit 嵌入 API)WebKit 提供给浏览器 UI 调用的接口,例如 iOS 中 WebKit 框架提供的 WKWeb ...
阅读全文
2020年9月5日
底层
runloop
一、NSNotification 的基本使用1、NSNotificationNSNotification 的定义如下:
1234567891011121314@interface NSNotification : NSObject <NSCopying, NSCoding>// ...
阅读全文
2020年8月30日
底层
runloop
1、@autoreleasepool{}在新建 iOS 项目的时候,会自动生成 main.m 文件:
1234567891011#import <UIKit/UIKit.h>#import "AppDelegate.h"int main(int argc, c ...
阅读全文
2020年8月15日
底层
isa
对象
一、iOS 引用计数概述对象的引用方式分为强引用和弱引用,对象的强引用和弱引用信息保存在 SideTables 中,SideTables 是全局的哈希数组,里面存储了有限数量的 SideTable,多个对象会共用一个 SideTable,也就是说每个 SideTable 中存储了多个对象的引 ...
阅读全文
2020年7月27日
底层
runloop
1、RunLoop 的概念我们都知道,APP 运行过程中有一个很重要的线程,就是主线程。但是,一般线程执行完任务后就会退出,而 APP 需要持续运行,所以就需要一个机制使主线程持续运行并随时处理用户事件,在 iOS 里,程序的持续运行就是通过 RunLoop 实现的。
RunLoop 的作用 ...
阅读全文
2020年5月12日
底层
runtime
1、self 和 supersuper 是每个开发者都很熟悉的东西,我们经常在重写父类方法的时候,经常通过 super 去调用一下父类的实现,例如:
123456- (instancetype)init { if (self = [super init]) { ...
阅读全文
2020年5月10日
底层
runtime
1、objc_msgSend 简介在 OC 中,所有的方法调用底层都会转换成 objc_msgSend 函数进行调用,例如,对于下面方法调用:
12[myObject test1];[myObject test2:100];
将其转换成 C++ 源码:
12((void (*)(id, SE ...
阅读全文
2020年4月26日
底层
runtime
1、method 与 Class先看下 Class 的结构:class_rw_t 里面的 methods、properties、protocols 是二维数组,是可读可写的,包含了类的初始内容、分类的内容:也就是说,这里的 methods 既包含分类中的方法,也包含了类的初始方法。实际上,我 ...
阅读全文