
iOS
文章平均质量分 93
iOS开发相关
卡卡西Sensei
这个作者很懒,什么都没留下…
展开
-
iOS xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun解决方法原创 2022-09-21 16:49:13 · 5896 阅读 · 0 评论 -
NSTimer 的正确用法你真的知道吗?
NSTimer你真的会使用吗?相信每个人都会很自信的说:知道啊!这简单的很,但是你确定你用对了吗?1. NSTimer的使用A: NSTimer你真的会使用吗?NSTimer的循环引用你知道吗?B: 这还不简单,不就是下面????这种使用吗,So easy 啊!self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction) userInfo:nil repeats:原创 2021-11-25 12:42:21 · 2428 阅读 · 0 评论 -
iOS底层探索之LLVM(三)——自定义Clang插件(下)
1. 写在前面在上篇博客中已经介绍了LLVM下载流程和LLVM的编译流程,也对编译完成的LLVM工程进行了 Clang和clangTooling的编译。本篇博客将手把手教大家,自定义一个 Clang 插件,进行代码的实现。2. 前期准备2.1 新建插件在/llvm/tools/clang/tools目录下新建插件JPPlugins(这个是你自己建的,名字随便都可以,你自己知道就可以)2.2 修改CMakeLists.txt修改/llvm/tools/clang/tools目录下的文件C原创 2021-09-25 10:02:56 · 743 阅读 · 1 评论 -
iOS底层探索之LLVM(二)——自定义Clang插件(上)
1. 写在前面现在出去面试,启动优化是绕不开的,到底我们的 APP 该如何去进行优化呢 ?在优化之前我们必须要先了解 LLVM,在上篇博客中已经介绍了LLVM和 Clang命令的使用。本篇博客将手把手教大家,自定义一个 Clang 插件。2....原创 2021-09-24 09:22:37 · 818 阅读 · 1 评论 -
iOS底层探索之LLVM(一)——初识LLVM
1. 写在前面在介绍LLVM之前,先来认识一下解释型语言和编译型语言。我们编写的源代码是偏向于我们人类直接的语言,我们非常轻松的就理解了,但是对于计算机硬件(CPU)而言,简直就是个天书,计算机是无法直接运行的。计算机只能识别某些特定的二进制指令,所以我们的代码在程序真正运行之前必须将源代码转换成二进制指令。源代码转换成二进制指令,不同的编程语言有不同的规定。解释型语言有的编程语言可以一边执行一边转换,不会生成可执行文件再去执行,这种编程语言称为解释型语言,使用的转换工具称为解释器,比如 Pyt原创 2021-09-09 17:28:47 · 1176 阅读 · 0 评论 -
iOS底层探索之Block(五)——Block源码分析(__block 底层都做了什么?)
回顾在上一篇博客中,通过对block追根溯源,汇编跟踪调式,源码分析,对底层结构和 block的属性方法都有一定的认识, 那么本篇博客将继续对block的底层进行分析。iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)iOS底层探索之Block(二)——如何解决Block循环引用问题?iOS底层探索之Block(三)——Block的本质iOS底层探索之Block(四)——Block的探索和源码分析1. block底层探索block的结构和签名都分析完了,但是blo原创 2021-08-31 15:20:38 · 640 阅读 · 0 评论 -
iOS底层探索之Block(四)——Block的探索和源码分析
Block的本质是什么吗?__Block底层又做了什么呢?在上一篇篇博客中,已经探索到block的本质是结构体(__main_block_impl_0)继承自__block_impl,block可以捕获外部变量,通过__block修饰内部可以变更外部变量的值。 那么本篇博客将对继续对block的底层原理进行分析。iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)iOS底层探索之Block(二)——如何解决Block循环引用问题?iOS底层探索之Block(三)——Blo原创 2021-08-30 20:08:43 · 723 阅读 · 0 评论 -
iOS底层探索之Block(三)——Block的本质
Block的本质是什么吗?__Block底层又做了什么呢?在之前的篇博客中,已经介绍了block的类型,也对产生block的循环引用的问题给出了几种解决方法,那么本篇博客将对block的底层原理进行分析。iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)iOS底层探索之Block(二)——如何解决Block循环引用问题?1. 通过block底层结构看本质在分析block的原理之前,我们得看看block的底层结构是什么样的,还是老规矩 clang一下如下代码:int原创 2021-08-29 14:39:26 · 609 阅读 · 0 评论 -
iOS底层探索之Block(二)——如何解决Block循环引用问题?
Block你知道几种?Block的循环引用你有几种解决办法呢?iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)在上一篇博客已经介绍了block的类型,那么本篇博客废话不多少直接进入主题,如何解决Block循环引用的问题。1. 为什么会出现循环引用分析1.1 正常情况在正常情况下,A持有了B,B的引用计数+1,当 A释放的时候给 B发送信号,B 接受到 release信号后,引用计数-1。正常使用,正常释放是不会出现循环引用问题的,但是如果出现你中有我,我中有你的原创 2021-08-28 09:14:43 · 875 阅读 · 0 评论 -
iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)
说在前面Block你知道几种?Block的循环引用你有几种解决办法呢?在上一篇博客结束了多线程的锁篇章的内容,最后也带大家手写了读写锁,那么从现在开始,将开启Block的探索篇章!1. 什么是 Block?Block就是一个代码块, Block是将函数及其执行上下文封装起来的对象,是一个匿名的函数对象, Block也有isa。既然Block内部封装了函数,那么它同样也有参数和返回值,本身也可以被作为参数在方法和函数间传递。具体的内容,后续的博客中会重点分析,这里就先不展开了!2. 你知道几种 bl原创 2021-08-27 13:12:08 · 1094 阅读 · 2 评论 -
iOS底层探索之多线程(十八)——锁篇章的完结篇(手把手两种方式带你实现一个读写锁!)
iOS 开发,各种锁你了解多少?NSLock、NSCondtion、NSRecursiveLock…回顾在上篇博客中已经通过 Swift的Foundation源码分析NSLock、NSCondtion、NSRecursiveLock、NSCondition等锁了,那么本篇博将手把手带你实现一个读写锁!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GC原创 2021-08-26 13:04:17 · 651 阅读 · 0 评论 -
iOS底层探索之多线程(十七)——通过 Swift的Foundation源码分析锁(NSLock、NSCondition、NSRecursiveLock)
iOS 开发,各种锁你了解多少?NSLock、NSCondtion、NSRecursiveLock…回顾在上篇博客中已经对NSLock、NSCondtion、NSRecursiveLock、NSCondition等锁进行了举例分析,那么本篇博客就继续分析锁,从Foundation源码分析锁!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列原创 2021-08-25 17:38:17 · 812 阅读 · 0 评论 -
iOS底层探索之多线程(十六)——锁分析(NSLock、NSCondtion、NSRecursiveLock、NSCondition)
iOS 开发,各种锁你了解多少?NSLock、NSCondtion、NSRecursiveLock…回顾在之前的一篇博客中,介绍了锁的种类,在上一篇博客中已经对@synchronized锁进行了源码分析,还有其他的一些锁没有介绍,那么本篇博客就分析一下其他的一些锁!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之原创 2021-08-24 18:14:57 · 739 阅读 · 0 评论 -
iOS底层探索之多线程(十五)—@synchronized源码分析
对于多线程你了解多少?对于锁你又了解多少?锁的原理你又知道吗?iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因)iOS底层探索之多线程(八)—GCD源码分析(函数的同步性、异步性、单例)原创 2021-08-23 15:59:53 · 557 阅读 · 0 评论 -
iOS底层探索之多线程(十四)—关于@synchronized锁你了解多少?
对于多线程你了解多少?对于锁你又了解多少?锁的原理你又知道吗?iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因)iOS底层探索之多线程(八)—GCD源码分析(函数的同步性、异步性、单例)原创 2021-08-22 22:40:38 · 900 阅读 · 0 评论 -
iOS底层探索之多线程(十三)—锁的种类你知多少?
回顾你用过哪些锁?对于锁的种类你了解多少?锁的原理知道否?从本篇博客开始将对锁的相关内容进行分析!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因)iOS底层探索之多线程(八)—GCD原创 2021-08-21 21:53:32 · 998 阅读 · 0 评论 -
iOS底层探索之多线程(十二)—GCD源码分析(事件源dispatch_source)
回顾在上篇博客已经对GCD的调度组做了介绍和举例应用,还有对底层源码的分析,那么本篇博客将对事件源dispatch_source进行分析!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因原创 2021-08-20 15:27:35 · 672 阅读 · 0 评论 -
iOS底层探索之多线程(十一)—GCD源码分析(调度组)
回顾在上篇博客已经对GCD的信号量做了一个介绍和举例应用,还有对底层源码的分析,那么本篇博客 看苹果工程师,如何巧妙封装调度组,看完底层源码直呼好家伙,真是妙啊!!!1. 调度组1.1 调度组介绍调度组最直接的作用就是控制任务的执行顺序dispatch_group_create :创建调度组组dispatch_group_async:进组的任务 执行dispatch_group_notify :进组任务执行完毕的通知dispatch_group_wait: 进组任务执行等待时间dis原创 2021-08-19 22:05:35 · 895 阅读 · 0 评论 -
iOS底层探索之多线程(十)—GCD源码分析( 信号量dispatch_semaphore_t)
回顾在上篇博客已经对GCD的栅栏函数做了一个基本介绍,还有应用的举例并且对底层源码进行了分析,本篇博客将对信号量进行探索分析!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因)iOS底原创 2021-08-18 19:23:24 · 1042 阅读 · 0 评论 -
iOS底层探索之多线程(九)—GCD源码分析(栅栏函数)
回顾在上篇博客已经对GCD函数的同步性/异步性还有单例的底层源码,作了详细的分析,那么本篇博客将对栅栏函数,调度组等底层源码进行探索分析!iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列iOS底层探索之多线程(五)—GCD不同队列源码分析iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)iOS底层探索之多线程(七)—GCD源码分析(死锁的原因原创 2021-08-17 22:07:05 · 1534 阅读 · 0 评论 -
iOS底层探索之多线程(八)—GCD源码分析(函数的同步性、异步性、单例)
回顾在上篇博客已经对GCD的sync同步函数产生死锁的情况,进行了底层的源码探索分析,那么本篇博客继续源码的探索分析!1. 全局并发队列+同步函数dq->dq_width == 1为串行队列,那么并发队列该怎么走呢?如下图,走的是下面的框框中流程但是这么多的分支,到底是走的哪一个呢?通过对_dispatch_sync_f_slow、 _dispatch_sync_recurse 、_dispatch_introspection_sync_begin 、_dispatch_sync_invo原创 2021-08-16 19:54:00 · 735 阅读 · 0 评论 -
iOS底层探索之多线程(七)—GCD源码分析(死锁的原因)
回顾在上篇博客已经对GCD的sync 同步函数、async 异步函数进行了源码的分析,那么本篇博客继续源码的探索分析!1. 补充sync 和 async 的区别是否可以开启新的线程执行任务任务的回调是否具有异步行、同步性是否产生死锁问题2. 死锁 源码分析在上篇博客分析,同步 sync函数的流程是_dispatch_sync_f -- > _dispatch_sync_f_inline -- > _dispatch_barrier_sync_f走到_dispatch_b原创 2021-08-15 21:48:32 · 887 阅读 · 0 评论 -
iOS底层探索之多线程(六)—GCD源码分析(sync 同步函数、async 异步函数)
回顾在上篇博客对GCD的不同的队列继续了底层的源码探索分析, 那么本篇博客将继续对GCD的函数继续源码分析。1. sync我们都知道 GCD底层是用C写的,封装了 block函数来执行添加的任务,那么这个 block底层是如何封装的呢?dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"GCD函数分析"); });在源码里面搜索dispatch_sync我们看的是block也就是第二个参数work,直接看 w原创 2021-08-14 14:12:11 · 989 阅读 · 0 评论 -
iOS底层探索之多线程(五)—GCD不同队列源码分析
回顾在上篇博客已经介绍了各种队列和异步、同步函数的组合,GCD的队列和函数,对队列和任务的执行有了清晰的认识, 那么本篇博客将继续介绍GCD的队列和源码分析。iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁iOS底层探索之多线程(三)—初识GCDiOS底层探索之多线程(四)—GCD的队列1. 主队列分析查看主队列的api如下图:主队列是一个特殊的串行队列主队列在调用main()函数之前自动创建的。主队列在应用程序上下文中用于与主线程和main runl原创 2021-08-13 13:42:23 · 967 阅读 · 0 评论 -
iOS底层探索之多线程(四)—GCD的队列
回顾在上篇博客已经介绍了GCD的队列和函数,我们对 GCD有了一个初步的认识,那么本篇博客将继续介绍GCD的相关知识。1. GCD中三种队列形式1.The main queue:系统自带的一个队列,放到这个队列中的 代码会被系统分配到主线程中执行。Main queue可以调用 dispatch_get_main_queue()来获得。因为main queue是与主线程相关的,所以这是一个串行队列, 交至其中的任务 顺序执行(一个任务执行完毕后,再执行下一个任务)。2.Global queues:整个原创 2021-08-12 13:58:33 · 1257 阅读 · 3 评论 -
iOS底层探索之多线程(三)—初识GCD
回顾在前两篇博客,已经介绍了进程和线程,还介绍了自旋锁和互斥锁等相关内容,在 iOS 开发中,使用最多的还是 GCD,那么从本篇开始讲陆续介绍 GCD。iOS底层探索之多线程(一)—进程和线程iOS底层探索之多线程(二)—线程和锁1. 什么是 GCDGCD定义Grand Center Dispatch简称GCD,是苹果公司开发的技术,以优化应用程序支持多核心处理器。纯 C语言,提供了非常多期待的函数。GCD是苹果公司为多核的并行运算出的解决方案。GCD会自动利用更多的CPU内核(比原创 2021-08-11 13:13:59 · 834 阅读 · 0 评论 -
iOS底层探索之多线程(二)—线程和锁
回顾在上一篇博客中,我们已经对进程和线程有了一定的了解了,那么本次博客将继续讲解!1. 线程的生命周期在程序开发中有个名词——生命周期,我们都知道APP 有生命周期,那么线程的生命周期是什么样子的呢?线程生命周期线程生命周期大致包括 5个阶段:新建:通过创建线程的函数方法,创建一个新的线程。就绪:线程创建完成之后,调用 start方法,线程这个时候处于等待状态,等待CPU时间分配执行。运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作原创 2021-08-10 20:44:49 · 1241 阅读 · 2 评论 -
iOS底层探索之多线程(一)—进程和线程
前言在iOS的面试中多线程是经常被问到的,多线程也是一个难点,很多面试者平时用的不多,因此很难回答到点子上,那么本篇博客就对多线程进行探索和分析。1. 进程和线程什么是进程进程是指在系统中正在运⾏的⼀个应⽤程序,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。每个进程之间是独立的,每个进程运行在其专有的且受保护的内存空间内在 MAC电脑上,可以通过“活动监视器”查看所开启的原创 2021-08-09 08:54:19 · 1621 阅读 · 1 评论 -
iOS底层探索之KVO(五)—FBKVOController分析
回顾在前面的几篇博客中,已经介绍了KVO的基本使用,如何自定义 KVO,那么本篇博客将分析一下FBKVOController这个优秀的KVO三方库。FBKVOController是一个函数式编程实现,不用移除观察者者。1. FBKVOController简单介绍FBKVOController是Facebook开源的一个基于系统KVO实现的框架。支持Objective-C和Swift语言。GitHub地址键值观察是一种特别有用的技术,用于在模型-视图-控制器应用程序中的层之间进行通信。KV原创 2021-08-08 12:54:27 · 1094 阅读 · 0 评论 -
iOS底层探索之KVO(四)—自定义KVO
回顾在上篇博客已经自定义了KVO,但是还没有完善,还有些问题需要解决,这么本篇博客就把自定义KVO进行完善。1. 观察者信息保存问题在上一篇的博客中,自定义KVO的简单逻辑是已经实现了,但是这里还是存在一个大的问题,就是如果我们要观察多个属性的时候,以及新值和旧值,都要观察以及传递了context的情况下就无效了。解决的办法就是,我们需要保存观察者相关的信息,那么就创建一个新类JPKVOInfo保存,代码的实现如下:typedef NS_OPTIONS(NSUInteger, JPKeyValue原创 2021-08-07 09:49:26 · 430 阅读 · 0 评论 -
iOS底层探索之KVO(三)—自定义KVO
回顾在前两篇博客中,已经介绍了KVO的相关操作,还有KVO的底层逻辑是通过动态生成子类,重写父类的方法实现的,那么我们如何自定义一个KVO呢?iOS底层探索之KVO(一)—KVO简介iOS底层探索之KVO(二)—KVO原理分析1. 前期分析系统的KVO是在NSObject的上面拓展了一些能力,如下图所示:系统的KVO使用的三部曲是:添加监听addObserver监听回调observeValueForKeyPath移除监听removeObserver我们也仿照系统的API自定义原创 2021-08-06 08:43:55 · 484 阅读 · 0 评论 -
iOS底层探索之KVO(二)—KVO原理分析
回顾在上一篇博客中,已经介绍了KVO的相关操作,那么接下来就去探索一下KVO的底层逻辑,KVO到底是如何实现的呢?在官方文档中有如下图中的说明键值观察是使用称为isa-swizzling的技术实现的。该isa指针,顾名思义,指向对象的类,它保持一个调度表。该调度表主要包含指向类实现的方法的指针,以及其他数据。当观察者为对象的属性注册时,被观察对象的 isa指针被修改,指向中间类而不是真正的类。因此,isa指针的值不一定反映实例的实际类。你不应该依赖isa指针来确定类的成员。原创 2021-08-05 08:40:04 · 475 阅读 · 0 评论 -
iOS底层探索之KVO(一)—KVO简介
回顾在iOS的面试中除了KVC是经常被问到的,还有KVO也是常问的,那么本篇博客就对KVO进行探索和分析下。1. 什么是KVOKVO 是 Objective-C对观察者设计模式的一种实现。KVO提供一种机制,指定一个被观察对象(例如A类),当对象某个属性(例如A中的字符串name)发生更改时,对象会获得通知,并作出相应处理;【且不需要给被观察的对象添加任何额外代码,就能使用KVO机制】。一般继承自NSObject的对象都默认支持KVO。KVO是响应式编程的代表。苹果官方文档Key-Value O原创 2021-08-04 09:26:16 · 1328 阅读 · 0 评论 -
iOS底层探索之KVC
前言在iOS的面试中,KVC几乎是必问的面试题之一,那么到底什么是KVC,KVC的原理是什么呢?KVC又称键值编码 (Key-Value-Coding),在iOS开发中是一个比较常见的技术点,相信很多开发人员都使用过KVC,其主要的两个方法就是如下两个,分别对应设置值和取值:- (void)setValue:(nullable id)value forKey:(NSString *)key;- (nullable id)valueForKey:(NSString *)key;1. KVC简介原创 2021-08-02 15:45:15 · 520 阅读 · 0 评论 -
iOS 面试题分析(二)
1.回顾在之前的博客中,对OC底层进行了一系列的源码的探索分析,上一篇博客也对一些面试题进行了回答和分析,本篇博客继续面试题分析!2. iOS面试题分析2.1 ⽅法的本质?sel是什么?IMP是什么?两者之间的关系⼜是什么?方法的本质:发送消息流程快速消息查找 (objc_msgSend),cache_t 缓存查找消息。慢速消息查找(lookUpImpOrForward)递归自己以及父类,自己找不到去父类缓存中找,依然找不到会进行父类慢速查找,直到找到nil。查找不到消息进行动态方法解原创 2021-07-30 12:04:04 · 347 阅读 · 0 评论 -
iOS 面试题分析(一)
目录1.回顾1.1 补充2. iOS面试题分析2.1 load与c++构造函数调用顺序2.2 runtime是什么?2.3 initialize调用顺序2.4 同名分类方法的调用顺序2.5 分类和扩展的区别?1.回顾在之前的博客中,对OC底层进行了一系列的探索分析,相信小伙伴们都学到了一定的知识,但是底层源码分析比较枯燥,那么本次就对一些面试题进行分析。1.1 补充在上篇博客iOS底层探索之类的加载(四):类的关联对象AssociatedObject中主要讲了类的扩展和类的关联对象,移除关联还没有讲原创 2021-07-29 13:52:59 · 419 阅读 · 0 评论 -
iOS底层探索之类的加载(四):类的关联对象AssociatedObject
1. 回顾在前面的几篇博客中,主要讲了类的加载、包括分类的加载底层探索,本次就类的扩展和关联对象进行分析。iOS底层探索之类的加载(三): attachCategories分析2. 扩展2.1 什么是分类和扩展首先我们来看看什么是分类和扩展category: 类别/分类专门用来给类添加新的方法不能给类添加成员属性,添加了成员变量,也无法取到注意:其实可以通过runtime给分类添加属性分类中用@property定义变量,只会生成变量的 getter,setter方法的声明,不能生成原创 2021-07-27 17:31:40 · 460 阅读 · 0 评论 -
iOS底层探索之类的加载(三): attachCategories分析
1.回顾在上篇博客中,已经对类的加载有了一定的了解,分类的加载也定位到了attachCategories方法中,那么本篇博文将对分类进行探索分析!iOS底层探索之类的加载(二): realizeClassWithoutSwift分析2. 分类分析2.1 分类加载路线在上篇博客中通过反推,已经确定了分类加载的两条路线,分别是:methodizeClass --> attachToClass --> attachCategoriesload_images --> loadAl原创 2021-07-21 17:38:43 · 622 阅读 · 4 评论 -
iOS底层探索之类的加载(二): realizeClassWithoutSwift分析
1. 回顾在上篇博文中,已经从dyld到_objc_init再到read_images整个流程串联起来了,最后定位到了类的初始化是在realizeClassWithoutSwift中,本篇博文将深入分析类的加载,请搬好板凳做下仔细往下看。iOS底层探索之类的加载(一):read_images分析2.realizeClassWithoutSwift在read_images流程中,会对类进行一些修复工作,同时会将类的名称与类进行关联,插入对照表中,并更新到内存中的类表。rw和ro的处理我们还不得而原创 2021-07-20 18:16:28 · 814 阅读 · 2 评论 -
iOS底层探索之类的加载(一):read_images分析
1. 回顾在前两篇博文中,已经对dyld动态链接器的底层源码进行了探索分析,但是dyld链接images镜像文件到内存的过程我们还不知道,接下来的几篇博文就着重去探索。iOS底层探索之dyld(上):动态链接器流程分析iOS底层探索之dyld(下):动态链接器流程源码分析_objc_init方法向dyld中注册了回调函数,下面就补充一点内容,探究下_objc_init方法。2. _objc_init简单分析先来看看_objc_init的底层源码void _objc_init(void原创 2021-07-19 17:13:05 · 901 阅读 · 0 评论