<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lucky_Deng的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Lucky_Deng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Lucky_Deng]]></copyright><item><title><![CDATA[笔记:git命令大汇总+关键命令理解]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116305094</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116305094</guid><author>Lucky_Deng</author><pubDate>Fri, 30 Apr 2021 15:56:12 +0800</pubDate><description><![CDATA[前言:

git是用起来很简单,有时候遇到特殊情况,忘记了哪个命令总不免查找一番,这里做一个统计,以便用时查看

首先前面我不会去按顺序介绍git,比如简介、安装等等.前面我会直接介绍创建版本、版本回退、删除等等操作,因为我相信大家都是熟悉git,如果兴趣的的可以看看博客后面的,简介、诞生、等等一些知识点,话不多说,马上开始

基本的linux命令学习

1. cd:改变目录

2. cd..:回到上一个目录,直接cd进入默认的目录

3. pwd:显示当前所在的目录路径

4. ls: 查...]]></description><category></category></item><item><title><![CDATA[耶,这些面试题有点歪,你会吗?]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116153266</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116153266</guid><author>Lucky_Deng</author><pubDate>Mon, 26 Apr 2021 13:58:17 +0800</pubDate><description><![CDATA[这次给大家分享一些面试题,你知道答案吗?

第一道面试题:

请看下面的代码,请问输出的结果是什么?



第二道面试题:

请看下面的代码,请问输出的结果是什么?



第三道面试题:

请看下面的代码,请问输出的结果是什么?





第四道面试题:

请看下面的代码,请问着2块代码会发生什么事?



面试题答案

1.第一道:

相信我们心中都是已经有答案了,现在我们一个一个来看看每一道面试题,其实考察的还是我们的基础的问题,涉及的都是某一个知识点,首先第一道.这样我们先看一下运行结果:1和3


]]></description><category></category></item><item><title><![CDATA[解决线程同步的方案汇总总结]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116133518</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116133518</guid><author>Lucky_Deng</author><pubDate>Sun, 25 Apr 2021 17:07:54 +0800</pubDate><description><![CDATA[这是一篇继上一篇继续介绍多线程同步的博客.(你了解多线程自旋锁、互斥锁、递归锁等锁吗?)

GNUstep介绍

再介绍其他锁之前我们先看一个其他的知识点.我们知道在Foundation框架下,苹果公开的源码只有NSObject,而我们想知道的NSString、NSArray、NSRunLoop、NSThread等等都是没有给源码的.只给了NSObject的部分实现,如果我们确实想看这些源码的话.通过汇编,打断点一步一步看,这样也是可以看到的,但是这样就有点麻烦,要会汇编语言,而且还要一点一点的调试才能知道]]></description><category></category></item><item><title><![CDATA[你了解多线程自旋锁、互斥锁、递归锁等锁吗?]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116021132</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/116021132</guid><author>Lucky_Deng</author><pubDate>Thu, 22 Apr 2021 17:02:09 +0800</pubDate><description><![CDATA[首先看一下问题引出,先看一些经典的问题.

多线程的隐患

首先我们利用多线程的话肯定是好处多多,因为我们可以同时去做一些事情,大大的提高了效率.像我们下载视频的时候就可以同时下载多个视频,这样是节省了很多时间,用户体验也会更好.但是用得时候也会存在一些安全隐患,比如同一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,这样会出现一些数据错乱和数据安全的问题.下面我们就看一些例子.

存钱取钱案例

比如我现在有1000元,同时有2个线程去处理,一个线程是取钱100元,一个线程是存钱100元,]]></description><category></category></item><item><title><![CDATA[多线程基础知识+17个字判别死锁]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115936401</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115936401</guid><author>Lucky_Deng</author><pubDate>Wed, 21 Apr 2021 10:04:39 +0800</pubDate><description><![CDATA[我们在面试的时候经常会遇到很多关于多线程的面试题,这些面试题的答案你都知道吗?

1.你理解的多线程是什么?

2.iOS的多线程方案有哪些?你更倾向于哪一种?为什么?

3.你在项目中用过GCD吗?有哪些使用?

4.GCD的队列类型有哪些?

5.什么情况下会产生死锁?

6.说一下OperationQueue和GCD的区别,以及各自的优势是什么?

7.线程安全的处理手段有哪些?

8.OC你了解的锁有哪些?在你回答的基础上进行二次提问;

追问一:自旋锁和互斥锁对比?

追问二:使用以上锁需要注意哪]]></description><category></category></item><item><title><![CDATA[你了解RunLoop线程保活吗?已封装好,2句代码直接使用]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115742345</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115742345</guid><author>Lucky_Deng</author><pubDate>Thu, 15 Apr 2021 22:54:47 +0800</pubDate><description><![CDATA[如果你没有了解RunLoop的一些基础,建议你看看这2篇博客,对线程保活本质理解有很大帮助

中高级iOS必备知识点之 RunLoop(一)

源码解读RunLoop,理解以后面试必加分

(温馨提示:这里是一步一步探究,步骤过程比较多,如嫌弃啰嗦,可直接拿后面封装的代码直,2句即可完美使用.)

我们面试中经常遇到很多面试官,问我们关于RunLoop的知识点,可能我们大多数人了解RunLoop,但在项目中,我们真正用到RunLoop还是比较少的,RunLoop其实应用场景还是比较多,比如我们的定时器、线程]]></description><category></category></item><item><title><![CDATA[源码解读RunLoop,理解以后面试必加分]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115662131</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115662131</guid><author>Lucky_Deng</author><pubDate>Tue, 13 Apr 2021 12:57:57 +0800</pubDate><description><![CDATA[继上一篇博客

中高级iOS必备知识点之RunLoop(一)继续介绍

RunLoop的状态

首先我们去RunLoop的源码去查看它有几种状态,如下图:



它一共有上面的这几种个状态

/* Run Loop Observer Activities */

typedefCF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {

kCFRunLoopEntry = (1UL &lt;&lt; 0), //即将进入loop

kCFRunLoopBeforeTime.]]></description><category></category></item><item><title><![CDATA[中高级iOS必备知识点之 RunLoop(一)]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115520455</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115520455</guid><author>Lucky_Deng</author><pubDate>Thu, 08 Apr 2021 14:51:56 +0800</pubDate><description><![CDATA[RunLoop学习起来是很抽象,也不好理解,所以一定多看几次,多学学才能学好!这也是中高级iOS必须掌握的知识点,面试中经常遇到.

什么是 RunLoop？

Run 表示运行，Loop 表示循环。结合在一起就是运行循环的意思。RunLoop就是在程序运行过程中循环做一些事情.

RunLoop的应用范畴有哪些?

定时器(Timer)、PerformSelector

GCD Async Main Queue

事件响应、手势识别、界面刷新

网络请求

AutoreieasePool

上面这些底层都]]></description><category></category></item><item><title><![CDATA[什么是Runtime?平时项目有用到过吗?]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115479556</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115479556</guid><author>Lucky_Deng</author><pubDate>Wed, 07 Apr 2021 10:22:01 +0800</pubDate><description><![CDATA[我们在面试中经常会被问到这些问题,到底怎么回答比较合适?

这样我们先去看一下我们平时项目中用到的Runtime,等下我们再来概括上面的问题的答案.我们肯定是用Runtime提供的API去做一些事情.

我们肯定是多多少少有接触Runtime,如果面试官问你,你肯定回答用过,不然说明你对Runtime一点都不了解.这样对你的印象就大打折扣了.

现在我就列一些我们可能用到的API(注意只是部分,不是所有).

Runtime类相关的API



Runtime成员变量相关的API



Runtime属性相]]></description><category></category></item><item><title><![CDATA[作为iOS开发,这道面试题你能答出来,说明你基础很OK!]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115406075</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115406075</guid><author>Lucky_Deng</author><pubDate>Fri, 02 Apr 2021 18:38:11 +0800</pubDate><description><![CDATA[首先我们先来看一下这道面试题是啥?



题目的描述非常少,我是先创建了一个继承NSObject的GDPerson类;



GDPerson类的.h文件



GDPerson类的.m文件

再看一下我们viewController.m里面的代码:



这是题目

请问:

1.print能不能调用成功?如果不能会怎么样?如果能的话调用结果是什么?

这个又是一个更扯的面试题,真正开发的时候,谁也不会这么写,这个还是主要考你基础!相信你看到这个题目之后应该心中已经有了答案,要不知道结果,要么可能知道结果]]></description><category></category></item><item><title><![CDATA[深入理解isKindOfClass、isMemberOfClass、synthesize、dynamic区别]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115378134</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115378134</guid><author>Lucky_Deng</author><pubDate>Thu, 01 Apr 2021 16:48:10 +0800</pubDate><description><![CDATA[一、isKindOfClass、isMemberOfClass区别

跟大家分享一道关于isKindOfClass和isMemberOfClass的面试题,也是比较常见的面试题,请看下面的代码:



请问当前控制台的打印是多少?这些题目看着特别的扯淡,为什么呢?首先我们在现实开发中绝对不会这么去写,也不会这么去判断,这也是主考官想知道你对这个知识点是否了解.这里也是考察我们对类对象,元类对象对使用isKindOfClass和isMemberOfClass的使用情况.

首先我们先创一个建命令行的项目,因为]]></description><category></category></item><item><title><![CDATA[从源码理解runtime之super、superclass知识点]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115371583</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115371583</guid><author>Lucky_Deng</author><pubDate>Thu, 01 Apr 2021 13:00:56 +0800</pubDate><description><![CDATA[跟大家分享一道关于super和superclass的面试题,也是比较常见的面试题,请看下面的代码:







请问当前的4个结果输出是多少?我们平时写代码估计也不会这么写,面试官问你这些问题,主要是看你对super和superclass是否理解透彻,接下来我们就去分析一下.

首先我们肯定是知道[selfclass]这个肯定就是当前类,也就是GDStudent;而[selfsuperclass]肯定是它的父类GDPerson

这两个应该是毫无疑问,我们看一下是不是这样,请看下图代码:



这两个..]]></description><category></category></item><item><title><![CDATA[关于runtime的消息机制,你看我就够了!]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115354089</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115354089</guid><author>Lucky_Deng</author><pubDate>Wed, 31 Mar 2021 16:37:46 +0800</pubDate><description><![CDATA[在上一个博客我们介绍了,消息机制的第一个阶段超级详细的Runtime的消息机制的消息发送阶段,现在我们继续来探究消息机制的的第二三阶段.

消息机制发送阶段的回顾

之前的一幅图标记的很清楚,这里我就用文字叙述一下:

1.首先会判断传入的receiver是不是为空,为空就退出报错,如果不为空继续执行

2.再从receiverClass的cache中查找方法,如果找到方法就调用结束,找不到方法就会继续从receiverClass的class_rw_t中的方法列表中查找方法,如果找到就调用结束退出,并把方.]]></description><category></category></item><item><title><![CDATA[超级详细的Runtime的消息机制的消息发送阶段]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115323283</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115323283</guid><author>Lucky_Deng</author><pubDate>Tue, 30 Mar 2021 13:36:53 +0800</pubDate><description><![CDATA[通过之前博客的介绍,这个博客我们来介绍objc_msgSend,相信很多小伙伴在面试的时候,经常遇到面试官问:你知道runtime的消息机制吗?等等关于runtime的知识点,学会了runtime不止让我们面试中能增加亮点,也会为我们开发中提高很多便利!

通过这个博客你将学习到消息机制的三大阶段的消息发送具体是怎么执行的,详细的介绍底层甚至汇编语言执行的过程,详细仔细学习下来你会收获不少!好了,话不多说,lets begin!

objc_msgSend三大阶段:消息发送、动态方法解析、消息转发

首先我]]></description><category></category></item><item><title><![CDATA[Runtime学习基础之class结构之散列表(哈希表)]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115306452</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115306452</guid><author>Lucky_Deng</author><pubDate>Mon, 29 Mar 2021 17:18:01 +0800</pubDate><description><![CDATA[上次我们学习runtime的isa,这节课我们继续学习runtime的class结构,这个博客我们主要说class的cache_t cache这个散列表(哈希表),主要是为了让我们更深刻的理解调用过程,通过这个博客,你将学习到:

通过Runtime调用对象方法的过程的更深刻的理解

我们以前如果面试官问你,一个对象调用对象方法的过程是什么样的?你可能会回答:instance通过isa找到类对象,然后调用对象方法,如果找不到就通过superclass找到父类寻找instance方法....通过这个博客,你就]]></description><category></category></item><item><title><![CDATA[Runtime学习基础之isa指针(终结篇)]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115288278</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115288278</guid><author>Lucky_Deng</author><pubDate>Sun, 28 Mar 2021 21:35:19 +0800</pubDate><description><![CDATA[如果您在看这篇博客时候,还没看过我上一篇博客,需要您去耐心的看一下,有助于更快更好的理解这篇博客的内容Runtime学习基础之isa指针

好,我们继续上篇博客继续说:我们先用结构体解决这个问题

,请看下面的代码



这里我们定义一个结构体,里面存储3个参数,我们看一下结果能不能解决这个问题:请看下面的代码截图





这个明显是解决了情况,大家可以尝试其他情况,接下来,我们就引入今天最重要的模块,就是共同体union

首先我们先看我们这个需求怎么用共用体union来解决,这里我直接写结果,等会再.]]></description><category></category></item><item><title><![CDATA[Runtime学习基础之isa指针]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115251130</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115251130</guid><author>Lucky_Deng</author><pubDate>Fri, 26 Mar 2021 17:14:25 +0800</pubDate><description><![CDATA[重要的事情说三遍:

重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针

重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针

重要提示:你要想学习并且学好Runtime,首先你要了解它底层的一些常用的数据结构,比如isa指针

首先问大家一个问题,如果问你对isa了解吗?

我估计你的答案基本就是:

实例对象的isa指向类对象,类对象的isa指向元类对象;当调用对象方法的时候,通过instance的isa找]]></description><category></category></item><item><title><![CDATA[关于block的循环引用,你看我就够了!]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115190663</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115190663</guid><author>Lucky_Deng</author><pubDate>Wed, 24 Mar 2021 23:26:10 +0800</pubDate><description><![CDATA[开篇:

如果你之前看过我block的其他的文章,你会更容易今天这篇博客的一些更深的解释,每篇只有一个知识点,基本上把这些都看了,block基本不会有什么问题的,基本都是掌握了.

block的源码解读之变量捕获机制(capture)

从源码、ARC、MRC带你理解block的三大类型

深入理解block的底层之copy

深入理解block的底层之对象类型的auto变量

深入理解__block修饰符的底层实现原理

循环引用:

在平时开发过程中，block是我们经常使用的功能，如果不多加注意就会造]]></description><category></category></item><item><title><![CDATA[深入理解__block修饰符的底层实现原理]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115135736</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115135736</guid><author>Lucky_Deng</author><pubDate>Tue, 23 Mar 2021 18:35:40 +0800</pubDate><description><![CDATA[在介绍今天的博客之前,你应该了解,block的三大类型,block的变量捕获机制,哪些情况下是NSMallcBlock,这些内容我前面的博客都有介绍的非常清楚,相信你看了会有很多收获.

通过这篇博客的学习,你将会了解到:

__block它当修饰符的时候,它的底层到底是怎么实现的.

首先看下面的代码:



这里为什么去修改变量的值会报错,大家知道吗?这时候我们去把当前的main.m文件转成c++文件,因为我们知道oc的底层就是c/c++,然后是汇编语言,然后是机器语言,可以通过下面的命令在终端执行:(]]></description><category></category></item><item><title><![CDATA[深入理解block的底层之对象类型的auto变量]]></title><link>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115101429</link><guid>https://blog.youkuaiyun.com/Lucky_Deng/article/details/115101429</guid><author>Lucky_Deng</author><pubDate>Mon, 22 Mar 2021 21:57:15 +0800</pubDate><description><![CDATA[上一个博客我们介绍的都是block是基本类型的数据变量,这个文章,你将了解block访问对象类型的auto变量将是什么情况

请看下面的代码:



ARC环境下运行

首先上面的代码我们是非常清楚,当person离开了自己的大括号作用域,它就会释放!

再请看下面的代码:



ARC环境下运行

这种情况请问到断点前,person会不会释放?答案:不会释放,因为block是mallocBlock,它对person是强引用吧,只有等block释放了,person才有可能释放!

这时候我们来看一下源码(前]]></description><category></category></item></channel></rss>