![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS底层原理
@Block_Smile
不间断的学习,越来越好!
展开
-
iOS底层原理篇(十八) ---- Block底层原理
1.block本身的copy2.__block修饰的属性的copy3.block捕获属性值的copy原创 2020-08-19 16:05:46 · 367 阅读 · 0 评论 -
iOS进阶之路----高级开发之路
iOS学习的过程和记录!1.iOS RunTime详解—源码分析2.iOS Runtime详解—动态方法决议与消息转发3.iOS底层原理篇(一)----类的本质和底层实现4.iOS底层原理篇(二)----类的缓存5.iOS底层原理篇(三)----类的编译、链接与加载6.iOS底层原理篇(四)----拓展、分类、关联对象7.iOS底层原理篇(五)----KVC原理8.iOS底层原理篇(六)----KVO初探持续更新中。。。。。...原创 2020-06-02 09:11:24 · 693 阅读 · 0 评论 -
iOS底层原理篇(十七) ---- Block初探
1.Block的分类Block有六种:在libclosure的源码中 //常见的三种 void * _NSConcreteStackBlock[32] = { 0 }; void * _NSConcreteMallocBlock[32] = { 0 }; void * _NSConcreteGlobalBlock[32] = { 0 }; //系统级别的三种 void * _NSConcreteAutoBlock[32] = { 0 }; void * _NSConcret原创 2020-08-07 20:53:05 · 269 阅读 · 0 评论 -
iOS底层原理篇(十六) ---- 自旋锁 atomic
1.概念自旋锁:它是为实现保护共享资源而提出的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。调度机制上略有不同:互斥锁:如果资源已经被占用,资源申请者只能进入睡眠状态。自旋锁:不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。可能存在两个问题:试图递归地获得自旋锁原创 2020-08-06 12:42:34 · 1526 阅读 · 0 评论 -
iOS底层原理篇(十五) ---- 条件锁NSCondition&NSConditionLock
1.NSCondition需求:生产者与消费者,生产者生产商品,消费者消耗商品,只有生产者产出的商品个数大于0时,消费者才能消费,否则等待生产者生产商品!实现: - (void)viewDidLoad { [super viewDidLoad]; self.productCount = 0; [self wm_conditon]; } - (void)wm_conditon { _condition = [[NSCondition alloc] init]原创 2020-08-05 17:27:36 · 1181 阅读 · 0 评论 -
iOS底层原理篇(一)----类的本质和底层实现
iOS类的本质!原创 2019-12-24 11:20:24 · 687 阅读 · 0 评论 -
iOS底层原理篇(二)----类的缓存
接上篇文章:类的本质和底层实现,我们今天说一下类的缓存!先看一下上篇中类的结构图:在图中,我们看到 cache_t cache ,这是一个结构体,就是我们要说的缓存!那么我们的类在缓存里面存了些什么东西呢?接下来我们探索一下...原创 2019-12-29 23:26:41 · 254 阅读 · 0 评论 -
iOS底层原理篇(三)----类的编译、链接与加载
我们都知道,App启动时,代码中+(void)load方法早于main函数调用,main函数是我们程序的入口,那么我们程序在main函数之前,都做了些什么工作呢?今天我们一起去探讨一下main函数之前的流程!首先我们的应用程序,会依赖很多的库–被操作系统写入内存的可执行代码的二进制!库又有静态库如.a文件和动态库如.frameworkApp启动之后,main函数加载之前的过程:...原创 2020-01-14 17:03:57 · 838 阅读 · 2 评论 -
iOS底层原理篇(四)----拓展、分类、关联对象
上篇博文底层原理篇(三)我们讲到了类的编译、链接、加载的过程,接下来我们去探索一下类与分类、拓展与分类、关联属性等的内容!1.类与分类原创 2020-01-20 11:30:21 · 571 阅读 · 0 评论 -
iOS底层原理篇(五)----KVC原理
1.简介先来看苹果文档的一段介绍:Key-value coding is a mechanism enabled by the NSKeyValueCoding informal protocol that objects adopt to provide indirect access to their properties. When an object is key-value coding compliant, its properties are addressable via string原创 2020-05-29 20:03:11 · 214 阅读 · 0 评论 -
iOS底层原理篇(六)----KVO初探
1.KVO简介键值观察是一种机制,它允许对象在其他对象的指定属性发生更改时得到通知。为了理解键值观察,必须首先理解键值编码。键值观察提供了一种机制,允许对象在其他对象的特定属性发生更改时得到通知。它对于应用程序中的模型层和控制器层之间的通信特别有用。控制器对象通常观察模型对象的属性,视图对象通过控制器观察模型对象的属性。此外,模型对象可以观察其他模型对象(通常用于确定依赖值何时发生变化),甚至可以观察自身(同样用于确定依赖值何时发生变化)。也可以观察属性,包括简单属性、对一关系和对多关系。对多关系的观原创 2020-06-01 11:01:20 · 242 阅读 · 0 评论 -
iOS底层原理篇(七)----KVO底层实现
前言1.Key-Value Observing Implementation DetailsAutomatic key-value observing is implemented using a technique called isa-swizzling.使用isa-swizzling技术实现自动键值观察。The isa pointer, as the name suggests, points to the object’s class which maintains a dispatc原创 2020-06-02 15:47:41 · 290 阅读 · 0 评论 -
iOS底层原理篇(八) ---- 多线程概念
多线程相关概念1.线程与进程1.线程定义线程是进程的基本执行单元,一个进程的所有任务都在线程中执行进程要想执行任务,必须得有线程,进程至少要有一条线程程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程2.进程定义进程是指在系统中正在运行的一个应用程序每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存3.线程与进程的关系地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cp原创 2020-06-03 16:47:12 · 301 阅读 · 0 评论 -
iOS底层原理篇(九)----GCD底层原理
简介原创 2020-06-13 14:34:27 · 2101 阅读 · 0 评论 -
iOS底层原理篇(十)----GCD应用
GCD之信号量之前的博文GCD的几个面试题中,有一个这样的面试题,具体打印及分析可以去看看,但是今天我们说的是另外一个问题:下图中,while循环外的打印,我就想要得到哈哈哈10的打印结果,我们该怎么处理?这里面发生了资源抢夺问题,很多线程同时对a进行操作,我们在这里可以使用信号量来完成需求!此处的关键是信号量上锁与解锁的代码插入的位置,我们在a++后面上锁,...原创 2020-07-22 17:26:20 · 393 阅读 · 0 评论 -
iOS底层原理篇(十一)----GCD源码分析(一)
同步函数 dispatch_sync先来看一张图:上面是死锁现象的分析,我们下面来看看底层的代码实现: void dispatch_sync(dispatch_queue_t dq, dispatch_block_t work) { uintptr_t dc_flags = DC_FLAG_BLOCK; if (unlikely(_dispatch_block_has_private_data(work))) { return _dispatch_sync_bl原创 2020-07-27 16:59:03 · 1294 阅读 · 0 评论 -
iOS底层原理篇(十二)----GCD源码分析(二)
线程组 dispatch_group相关函数 //创建组 dispatch_group_t dispatch_group_create(void); //进组 void dispatch_group_enter(dispatch_group_t group); //出组 void dispatch_group_leave(dispatch_group_t group); //通知 void dispatch_group_notify(dispatch_group_t g原创 2020-07-28 16:08:37 · 289 阅读 · 0 评论 -
iOS底层原理篇(十三)----synchronize源码分析
今天开始,学习一下iOS相关锁的分析!@synchronized首先来看一个经典的买票案例: - (void)viewDidLoad { [super viewDidLoad]; self.ticketCount = 20; [self wm_testSaleTicket]; } - (void)wm_testSaleTicket{ dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (int i原创 2020-08-04 15:35:50 · 615 阅读 · 0 评论 -
iOS底层原理篇(十四) ---- NSLock、NSRecursiveLock、@synchronize比较
首先看一个crash - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"123"); [self wm_crash]; } - (void)wm_crash{ for (int i = 0; i < 200000; i++) { dispatch_async(dispatch_get_global_queue(0, 0), ^{ _testArray = .原创 2020-08-04 17:48:47 · 1140 阅读 · 0 评论