KM的博客.

KM的博客.

技术和生活的记录者

Alamfire源码
Alamfire Github地址 1、Request分析 Request准守的Protocol * Equatable * Hashable * CustomStringConvertible * Downloadable * UploadableConvertible Equatable 1 2 3 4 5 extension Request: Equatable { public static func ==(lhs: Request, rhs: Request) -> Bool {
Kingfisher源码
Kingfisher源码 Kingfisher3架构 kf命名空间 * 类 Kingfisher 是一个范型类,类型是 Base * 协议 KingfisherCompatible,声明属性 kf,类型是范型 CompatibleType 。并要求遵守协议的一方,实现该属性的 get 方法。 * 协议扩展中,协议自身实现了属性。这样就不必在每个遵守该协议的类里实现该属性了。 * 协议里的 kf 是一个 Kingfisher 类的实例,调用的方法是 Kingfisher 类的方法。 * 根据类型的不同,调用不同类型里的方法。如:对应 Image/ImageView / Button
Swift字符串
Swift5 字符串String Swift version 5.2 Xcode11 1 let str = "WhelloKitty" 字符串截取前n个字符 1 2 3 4 5 let subStr1 = String(str.dropFirst()) print(subStr1) // helloKitty let subStr2 = String(str.dropFirst(6)) print(subStr2) // Kitty 字符串截取?前的一部分 1 2 3 4 5 6 7 if let index = path.firstIndex(of: "?") {
Swift标准库源码
Swift标准库源码 * Swift.org * Github开源地址 * 1、下载后的路径使用BBEdit查看所有标准库:stdlib/public/core/ * 2、网页查看:https://github.com/apple/swift/tree/master/stdlib/public/core 如何阅读 Swift 标准库中的源码 | Swift源码地址 00关键词 * Array解读 | FFIB-LeetCode | ContiguousArray | ContiguousArray喵神解读 * Sequence解读 | Col
Swift集合源码
Swift Collections 使用篇 1、Array 数组基本操作 let someArray = [1,2,3,4,5,6] let first5 = Array(someArray.prefix(3)) // [1,2,3] 数组Array的两种for循环 只遍历value 1 2 3 for item in array { print(item) } 快速枚举数组,用元祖(index, value)接收 1 2 3 for (index, value) in array.enumerated() { print(index, value) } arr
Swift函数式编程
Functional Programming in Swift 函数式编程介绍。版本:swift 4.2, iOS 12, Xcode 10 在本部分中,您将介绍FP中的一些关键概念。许多讨论FP的论文都将不变状态和缺乏副作用视为FP的最重要方面,因此您将从这里开始。 不变性和副作用 无论您首先学习哪种编程语言,您可能要学习的最初概念之一就是变量代表数据或状态。如果您退一步考虑一下这个想法,变量似乎很奇怪。 术语“变量”表示随程序运行而变化的数量。从数学角度考虑数量问题,您已将时间作为软件行为的关键参数。通过更改变量,可以创建可变状态。 为了进行演示,请将以下代码添加到playgrou
LookinLoader安装使用
Lookin查看自己的App * 1、Lookin下载 * 2、pod添加:pod 'LookinServer', :configurations => ['Debug'] * 3、pod install * 4、打开mac上安装的Lookin 配合LookinLoader查看第三方App 官方:正常情况下,你无法将 LookinServer 嵌入到别人的 iOS App 里,因此你也就无法使用 Lookin 查看别人的 App。但我们也注意到有些第三方开发者通过某些方式实现了向别人的 App 中注入 Framework
Dyld源码阅读
Dyld源码阅读 * Version:dyld-551.4 * Lauange:C++ * load()调用路径:3566行 * load()->loadPhase0()->loadPhase1()->loadPhase2()->loadPhase4()->loadPhase5()打开或检查已经存在的动态库:dyld3::findInSharedCacheImage->loadPhase5load()->loadPhase5open()->loadPhase6()->加载3种Mach-O文件 1、动态库路径 iOS越狱手机 * 在Mac\iOS中,是使用了/usr
iOS越狱初体验
iOS越狱初体验 iOS越狱能做到什么? * 查看 第三方APP UI 排版方式、布局实现技术 * 获取三方App内部资源 .assets/.plist/icon… * 修改APP 功能重新打包 (EX: 去广告) * 反编译推测原始工程代码内容 * dump 出 .h 头文件 / keycahin / db 越狱环境 macOS 版本:10.15 Catalina iOS 版本:iPhone 5s (iOS 9.0.1/ 完美越狱*必要) Cydia: Open SSH 逆向工程大致流程: 1. 解密并导出应用程序、class-dump导出头文件 2. 从当面界面入手,获取
算法实战
为什么学算法? 为什么要学习算法? * 算法是内功,决定你武功的高度 * 算法能让你更好更快理解一门语言系统的设计理念 * 算法能让你触类旁通 * momo算法题:接雨水 反转链表II 旋转矩阵 主要算法 * 基础技巧:分治、二分、贪心 * 排序算法:快速排序、归并排序、计数排序 * 搜索算法:回溯算法、递归、深度优先遍历,BFS广度优先遍历,二叉搜索树等 * 图论:最短路径、最小生成树 * 动态规划:背包问题、最长子序列 数据结构 * 数组与链表:单 / 双向链表 * 栈与队列 * 哈希表 * 堆:最大堆 / 最小堆 * 树与图:最近公共祖先、并查集 * 字
算法基础
算法基础 为什么要学习算法? * 算法是内功,决定你武功的高度 * 算法能让你更好更快理解一门语言系统的设计理念 * 算法能让你触类旁通 1 、数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func merge(_ nums1: inout [Int], _ m: Int, _ nums2: [Int], _ n: Int) { var p1 = m - 1, p2 = n - 1 var cur = m + n - 1 while (p2 >= 0) {
数据结构思想
第一篇数据结构 数组和链表 思考题: 1.如何分别用链表和数组实现LRU缓冲淘汰策略? 1)什么是缓存? * 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。 什么是C CPU在从内存读取数据的时候,会先把读取到的数据加载到CPU的缓存中。而CPU每次从内存读取数据并不是只读取那个特定要访问的地址,而是读取一个数据块(这个大小我不太确定。。)并保存到CPU缓存中,然后下次访问内存数据的时候就会先从CPU缓存开始查找,如果找到就不需要再从内存中取。这样就实现了比内存访问速度更快的机制,也就是CPU缓存存
avatar
KM
探索大前端前沿技术 iOS/Flutter/Vue