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源码
Kingfisher3架构
kf命名空间
* 类 Kingfisher 是一个范型类,类型是 Base
* 协议 KingfisherCompatible,声明属性 kf,类型是范型 CompatibleType 。并要求遵守协议的一方,实现该属性的 get 方法。
* 协议扩展中,协议自身实现了属性。这样就不必在每个遵守该协议的类里实现该属性了。
* 协议里的 kf 是一个 Kingfisher 类的实例,调用的方法是 Kingfisher 类的方法。
* 根据类型的不同,调用不同类型里的方法。如:对应 Image/ImageView / Button
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.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 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
Functional Programming in Swift
函数式编程介绍。版本:swift 4.2, iOS 12, Xcode 10
在本部分中,您将介绍FP中的一些关键概念。许多讨论FP的论文都将不变状态和缺乏副作用视为FP的最重要方面,因此您将从这里开始。
不变性和副作用
无论您首先学习哪种编程语言,您可能要学习的最初概念之一就是变量代表数据或状态。如果您退一步考虑一下这个想法,变量似乎很奇怪。
术语“变量”表示随程序运行而变化的数量。从数学角度考虑数量问题,您已将时间作为软件行为的关键参数。通过更改变量,可以创建可变状态。
为了进行演示,请将以下代码添加到playgrou
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源码阅读
* 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越狱能做到什么?
* 查看 第三方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缓存存