Swift Talk:理解值类型

2022-06-30
阅读 5 分钟
1.3k
标准库中提供的所有的基本集合类型都是值类型,通过写时复制的思想保证了他的高效性。集合类型是我们比较常用到的数据类型,所以了解他的性能特性很重要,我们来一起看一下写时复制是如何工作的,并且尝试自己手动实现一个。

Swift 5.7 中的 any 和 some (译)

2022-06-27
阅读 3 分钟
2.3k
由于 any 和 some 都适用于协议,因此我想在这篇博文中将它们放在一起比较以便更好地解释它们解决分别解决了什么问题,以及在什么情况下使用 any、some 或其他的。

理解 Swift 中的 @inlinable (译)

2022-06-02
阅读 3 分钟
3.5k
@inlinable 属性是 Swift 鲜为人知的属性之一。与其他同类一样,它的目的是启用一组特定的微优化,您可以使用它们来提高应用程序的性能。让我们来看看这个是如何工作的。

互斥锁和信号量有什么不同?(译)

2022-05-09
阅读 1 分钟
2.7k
信号量是一个非负变量, 并且在线程之间共享。信号量是一种信号机制,一个线程正在等待信号量可以由另一个线程发出。它使用两个原子操作,1)wait和 2)signal实现线程同步。

AES加解密使用总结

2021-12-14
阅读 3 分钟
3.1k
AES, 高级加密标准, 是采用区块加密的一种标准, 又称Rijndael加密法. 严格上来讲, AES和Rijndael又不是完全一样, AES的区块长度固定为128比特, 秘钥长度可以是128, 192或者256. Rijndael加密法可以支持更大范围的区块和密钥长度, Rijndael使用的密钥和区块长度均可以是128,192或256比特. AES是对称加密最流行的算法之一.

iOS边下边播总结

2021-12-10
阅读 4 分钟
4k
最近修改了项目中的视频播放功能, 由之前的全量下载完再播, 改为了边下边播的方式. 由于我们项目中的视频在发出时都进行了加密, 所以整个过程其实就是边下载边解密边播放.

iOS底层系列:关联对象

2020-09-26
阅读 3 分钟
1.4k
前言之前我们聊过了,在Category中声明一个属性,可以自己手动实现set和get方法,但是因为没有成员变量,所以说并不能储值。我们可以通过runtime的api实现让成员变量可以储值,其实本质也并不是储存,而是通过关联对象实现了这种看似是可以储值的效果。我们可以用下面的方法来设置关联对象。 {代码...} 今天我们就来探究...

iOS底层系列:KVC

2020-09-24
阅读 1 分钟
2k
今天我们简单聊一下KVC,键值编码。平时我们给属性赋值或者取值都是使用点语法,调用属性的set或者get方法,除此之外苹果还为我们提供另一种方法,使用key或者可以keyPath赋值或者取值。

iOS底层系列:Category

2020-09-14
阅读 8 分钟
2.1k
我们在Category中,可以直接添加方法,而且我们也都知道,添加的方法会合并到本类当中,同时我们也可以声明属性,但是此时的属性没有功能,也就是不能存值,这就类似于Swift中的计算属性,如果我们想让这个属性可以储存值,就要用runtime的方式,动态的添加。

iOS底层系列:KVO

2020-09-08
阅读 5 分钟
3.6k
最近打算重新梳理一遍iOS底层的知识,尽量把所有的底层知识点都搞懂搞透彻,碍于iOS不开源,有很多东西并不能很直观的去学习,所以可能有瑕疵,希望大家可以理解,并一起交流,笔者也尽可能做到尽善尽美吧。

XMPPFramework使用记录(一)

2020-09-07
阅读 5 分钟
2.9k
最近公司需要我们使用XMPP协议,实现一个简单的IM模块。在此之前没有接触过IM相关技术,仅了解iOS可以通过集成XMPPFramework来快速的实现某些需求。本系列文章旨在记录使用XMPPFramework过程中遇到的问题。

Swift枚举关联值的内存探究

2020-08-18
阅读 4 分钟
6.7k
我们可以看到,在我们创建一个枚举值t的时候,设置他的选项为test1,同时可以关联3个Int类型的值,然后在switch中,我们还可以把这3个Int值取出来进行使用。

《图解密码技术》读后总结

2020-03-22
阅读 4 分钟
2k
最近工作中用到了加密相关的技术点,非常头疼,常被公钥加密、签名等一系列概念搞的头大,所以买来《图解密码技术》这本书,想大概的梳理一下密码技术的入门知识。

CocoaPods 升级新版本问题

2019-12-25
阅读 1 分钟
9.4k
在公司把cocoapods升级到1.8.3版本之后,开始出现了问题,pod install和pod search都失效。 执行pod install 之后,会一直卡在 {代码...} 然后更新到cocoapods1.8.4, 问题依然存在。 超时之后,会提示下面的错误 {代码...} 按照网上找到的教程,在podfile文件第一行添加 source, {代码...} 再次执行pod install, 在下...

面向切面编程:Aspects源码解析

2019-05-23
阅读 10 分钟
3k
简单说,就是在不影响我们现在正常业务的情况下,对某些类的某些方法嵌入操作。我们可以很通俗的理解一个方法可以有方法前和方法后这两个切面,当然还可以把方法执行过程看过一个整的切面去hook。

Objective-C Method Swizzling

2019-05-16
阅读 5 分钟
3.1k
Method Swizzling已经被聊烂了,都知道这是Objective-C的黑魔法,可以交换两个方法的实现。今天我也来聊一下Method Swizzling。

组件化实践

2019-04-28
阅读 7 分钟
2.6k
大神们讨论具体的实施方案,是对理论的描述,在架构层面来分析利弊,我看过之后感觉还是有点晦涩,具体的方案异同之处我们先不说,今天我们先从应用着手,在自己当前的工程实施组件化。

iOS:Block 循环引用问题

2019-04-07
阅读 4 分钟
4.4k
循环引用是一个比较常见的问题,之前面试的时候也会被问到,如何解决循环引用问题,其实大家都知道使用__block,__weak这些修饰符可以解决循环引用问题,那今天我们要讨论的就是他们是怎么样解决了循环引用问题的。

iOS:Block __block修饰符

2019-04-07
阅读 4 分钟
15.2k
__block修饰符 上一篇文章中说过,auto类型的局部变量,可以被block捕获,但是不能修改值。 __block可以解决block内部无法修改外部auto变量的问题。 {代码...} 用法就是这么简单,这样我们修改age为20的时候,打印也是20。 我们看看编译后的代码。 {代码...} 在block内部多了一个指向__Block_byref_age_0类型结构体的age...

iOS:Block变量捕获

2019-04-07
阅读 3 分钟
2.6k
这篇博客我们从一个很常见的题目入手。 {代码...} 这个题目就涉及到了block内访问外部变量,block有个变量捕获机制, 我们新建一个mac的命令行工程,把上面代码写进去,然后用clang把main.m文件编译为cpp的文件看一下。 具体的block底层结构上一篇文章我们已经说过了,这里我们针对结构就不在赘述,直接说核心点。 auto...

iOS:Block的本质

2019-04-04
阅读 3 分钟
2.6k
我们项目中经常使用block来进行回调传值,之前我对block的认识也就仅仅的停留在基础的层面,包括简单的使用和一些基本的避免循环引用的方法,这篇博客是我在对block进行了更深一层的学习之后的记录和总结,希望对大家有所帮助。

多线程、锁和线程同步方案

2019-04-01
阅读 7 分钟
5.2k
多线程技术大家都很了解,而且在项目中也比较常用。比如开启一个子线程来处理一些耗时的计算,然后返回主线程刷新UI等。首先我们先简单的梳理一下常用到的多线程方案。具体的用法这里我就不说了,每一种方案大家可以去查一下,网上教程很多。

Objective-C 中的消息与消息转发

2019-03-20
阅读 7 分钟
2.3k
大家都知道OC是一门动态语言,其动态性由底层的runtime库来支撑实现。OC所有的方法都是通过runtime来发送消息,当我们探讨消息发送,其实也就是在探讨OC方法的调用过程。

RunLoop(二):实际应用

2019-03-12
阅读 7 分钟
2.3k
我们在vc中创建一个定时器,然后在view上面添加一个滚动视图,比如说scrollView,可以发现在scrollView滚动的时候,timer定时器会卡住,停止滚动之后才重新生效。

RunLoop(一):源码与逻辑

2019-03-12
阅读 8 分钟
2.2k
什么是RunLoop?顾名思义RunLoop是一个运行循环,它的作用是使得程序在运行之后不会马上退出,保持运行状态,来处理一些触摸事件、定时器时间等。RunLoop可以使得线程在有任务的时候处理任务,没有任务的时候休眠,以此来节省CPU资源,提高程序性能。

深入学习runtime

2019-03-07
阅读 7 分钟
2k
本文的切入点是2014年的一场线下分享会,也就是sunnyxx分享的objc runtime。很惭愧,这么多年了才完整的看了一下这个分享会视频。当时他出了一份试题,并戏称精神病院objc runtime入院考试。

Autoreleasepool自动释放池-源码

2019-03-07
阅读 6 分钟
2.8k
Autoreleasepool相关的内容是在面试中比较容易被问到的。之前呢,谈到Autoreleasepool只能粗浅的了解到自动释放池与内存的管理有关,具体是怎么样来管理和释放对象,并没有深入的学习,本文是笔者在深入学习Autoreleasepool之后的总结和心得,希望对大家有帮助。

YYCache 源码学习(二):YYDiskCache

2019-02-28
阅读 3 分钟
2.6k
从作者的《YYCache 设计思路》一文中可以看出,作者在设计YYDiskCache之前做了充分的测试:iPhone 6 64G 下,SQLite 写入性能比直接写文件要高,但读取性能取决于数据大小:当单条数据小于 20K 时,数据越小 SQLite 读取性能越高;单条数据大于 20K 时,直接写为文件速度会更快一些。

YYCache 源码学习(一):YYMemoryCache

2019-02-28
阅读 5 分钟
5.8k
其实最近是在重新熟练Swift的使用,我想出了一个比较实用的方法,那就是一边看OC的项目,看懂之后用Swift实现一遍。这样既学习了优秀的源码又练习了Swift,一举两得。之前看过几篇文章是剖析YYKit里面的一些小模块,对源码对一些解读。不得不说作者ibireme的设计思维和技术细节的处理都非常的棒。所以就选了YYKit里面的...

深度优先搜索和广度优先搜索

2019-01-30
阅读 6 分钟
2.3k
不撞南墙不回头-深度优先搜索 基础部分 对于深度优先搜索和广度优先搜索,我很难形象的去表达它的定义。我们从一个例子来切入。 输入一个数字n,输出1~n的全排列。即n=3时,输出123,132,213,231,312,321 把问题形象化,假如有1,2,3三张扑克牌和编号为1,2,3的三个箱子,把三张扑克牌分别放到三个箱子里有几种方...