基本的数据结构 GCD的类都是struct定义的。 包括所有的父类的数据成员,都平铺重复的写在一个个的struct中。 提高效率,避免引入继承机制带来的代码执行上的延迟. 为...
线程是工厂,operation是管理者,queue是流水线 工厂接到任务,就会创建operation和queue,然后将任务交给operation,operation管理qu...
GCD的优势: GCD 可用于多核的并行运算 GCD 会自动利用更多的 CPU 内核(比如双核、四核) GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 程序员...
[TOC] runtime相关问题 面试题出自掘金的一篇文章《阿里、字节:一套高效的iOS面试题》该面试题解答github 地址版本目前已经完结,可自行下载pdf进行阅读,仅...
自旋锁 & 互斥锁 自旋锁:atomic、OSSpinLock、dispatch_semaphore_t临界区加锁,不解锁一直忙碌不停循环,没有线程切换的时间开销,用于执行频...
解决tableView复用错乱问题 每次都会调UIImageView+WebCache文件中的 [self sd_cancelCurrentImageLoad]; 原理解释参...
原理: UIScrollView在滚动过程当中,其实是在修改原点坐标。当手指触摸后, scroll view会暂时拦截触摸事件,使用一个计时器**。假如在计时器到点后没有发生...
自动释放池原理 Autorelease pool自动释放池,是OC的一种内存自动回收机制,可以将放入的临时变量统一回收释放。自动释放池销毁的时,池内所有的对象都会做一次rel...
Aspect切面编程 定义 切面编程:以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。 Aspects简介: Aspects gi...
SDWebImage 组成部分 DownLoader :下载类,负责下载。SDWebImageDownloader优化下载过程;SDWebImageDownloaderOpe...
一、临时变量什么时候释放? 答:ARC环境,大括号结束时释放。MRC环境,在主线程中,临时变量会在runloop运行结束时释放。在非主线程中,临时变量会在线程退出时释放。 二...
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是变量不会有默认值。所以要使用变量之前必须要对其初始化。如果在使用变量之前不进行初...
Aspects简介: Aspects github地址:https://github.com/steipete/Aspects.git Aspect是一个基于metho sw...
使用MVVM iOS中,我们使用的大部分都是MVC架构。虽然MVC的层次明确,但是由于功能日益的增加、代码的维护,使得更多的代码被写在了Controller中,这样Contr...
屏幕显示图像的原理 从过去的 CRT 显示器原理说起。CRT 的电子枪按照上面方式,从上到下一行行扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次扫描。...
内存优化工具 Instruments的Allocations 这个工具能显示出应用的实际内存占用,并可以按大小进行排序。我们只要找出那些占用高的,分析其原因,找到相应的解决办...
参考链接: 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 一、原理 1、虚拟内存和物理内存 早期计算机没有虚拟地址,一旦加载都会全部加载到内存中,而...
一、pre-main阶段测量 DYLD_PRINT_STATISTICS = 1 XCODE8 以后才支持的这个命令,并且仅针对iOS 10以上的系统才会打印。 设置好后把程...
App启动过程 iOS应用的启动可分为pre-main阶段和main( )阶段,其中系统做的事情依次是: 无论对于系统的动态链接库还是对于App本身的可执行文件而言,他们都算...