这篇主要是介绍 Facebook 的开源库 fishhook 的原理和源码实现,需要了解 Mach-O 的相关知识,最好先阅读 Mach-O 文件探索,两篇结合来看效果更佳。
使用
首先写一个 demo 来使用 fishhook,这个 demo 来 hook 系统函数 printf
,让它始终打印 damon
1 |
|
这篇主要是介绍 Facebook 的开源库 fishhook 的原理和源码实现,需要了解 Mach-O 的相关知识,最好先阅读 Mach-O 文件探索,两篇结合来看效果更佳。
首先写一个 demo 来使用 fishhook,这个 demo 来 hook 系统函数 printf
,让它始终打印 damon
1 | #import <stdio.h> |
Mach-O 是Mach object的缩写,常见的Mach-O文件类型有目标文件、可执行文件、Dsym文件等。了解Mach-O文件的格式,对于静态分析、动态调试、自动化测试及安全都很有意义。可以使用可视化工具来查看 Mach-O 文件,推荐使用 MachOView 软件
Mach-O主要由三部分组成,分别是 Header、Load Command、Data。
Mach-O 头部(Header)保存了CPU架构、大小端序、文件类型、加载命令数量等一些基本信息。Header的定义:
1 | struct mach_header_64 { |
TCP是一个面向连接,可靠的,基于字节流的传输层通信协议,负责建立、维护、管理端到端连接。
MJRefresh 是一个功能强大的 iOS 上拉下拉刷新组件。有很多大厂App(抖音、快手、京东、喜马拉雅等)都在使用,所以是一个很值得学习的库。
先简单说明上拉下拉刷新的原理再去详细分析 MJRefresh
框架结构以及具体实现。
首先 header/footer 是添加到 UIScrollView
上的,是它的子控件,比如 header 的高度是40,那么它的y值就是 -40
,footer的y值就是 contentSizeHeight
。
上拉或者下拉到一定程度,松手后就会进入刷新状态,这时候 header/footer 都在显示在可见范围悬停,这是通过设置 UIScrollView 的 contentInset.top
和 contentInset.bottom
来实现,刷新结束后,再重置回来。
上面介绍了一些上拉下拉的原理,其实很简单, 接下去具体看一下 MJRefresh
是如何做的。
MJRefreshComponent
是header和footer 的基类,实际都是使用最后一层的类。接下来具体看每个类的具体职责和实现。
开始之前,假设你已经有Django和Django REST framework的一些基础了
minxis
的类有5种
他们分别对应了对数据库的增查改删操作,使用它们的好处是不用重复写着相同的业务代码逻辑,因为每个mixins
内部都写好了对应的逻辑,只需要设置一下queryset
和serializer_class
就可以了.
ViewSet
也有5种,分别是
如果对闭包不了解的同学请移步到这里先, 因为装饰器要通过闭包来实现
刚开始学Python的时候,装饰器(decorator)一直是个让人难以理解的东西,所以想通过这篇文章能够带你一步一步来理解Python装饰器的原理
经典的设计模式有23种,设计模式其实也就是巨人们常年写代码经验的思想总结,虽然说这是一种思想,但是由于语法的限制没有办法轻易实现(比如说用C语言来实现组合模式).在面向对象的设计模式中, decorator被称为装饰模式,OOP的装饰模式需要通过继承和组合来实现,而Python除了能支持OOP的decorator外,直接从语法层次支持decorator。
下面开始介绍装饰器的原理
在Python
中,函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。
例如:
1 | def now(): |
在 Python
中,闭包的概念是:
1.首先是个嵌套函数
2.内层函数使用了外层函数的变量或者参数
3.外层函数把内层函数当做返回值进行返回
1 | def func_outer(): # 外部函数 |
由以上可以看出,test
变量其实就是返回的func_innter
函数对象,test()
就是通过这个变量来调用func_innter
函数.
在阅读之前,希望先了解 NSURLSession
的使用和 HTTP/HTTPS 的基础知识。
AFNetworking 的结构:
在iOS6发布前,开发人员都习惯用UITableView
来展示所有类型的数据集合。虽然苹果公司在照片应用中使用过很长一段时间类似UICollectionView
视图的UI,但第三方开发人员无法使用它。当时我们可以利用第三方框架(如three20)来做类似的功能。在iOS6苹果引入了一个新的控制器UICollectionViewController
。提供了一个更加优雅的方法,把各种类型的数据显示在视图中。
现在, 在各种类型的APP中,UICollectionView
的身影随处可见,不管在什么应用,总有UICollectionView
的应用场景,而苹果也在iOS10中对UICollectionView
做了更好的优化。本文主要是展示UICollectionView
的常用动画和装逼动画,也会在本文对所有的动画进行详细的讲解。先看效果
简单来说,runtime
就是一个C语言库,包含了很多底层C
语言的API。Objective-C
语言是一门动态语言,我们平时变编写的Objective-C
代码,在程序运行时,最终都是转成了runtime
的C
语言代码。所以,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法。
利用runtime
机制让我们可以在程序运行时动态修改类对象、对象中的所有属性、方法,就算是私有方法以及私有属性都是可以动态修改的。KVO
的底层实现就是利用runtime
来实现的
首先,我们来认识一下classes
和objects
的概念。我们都知道,Objects
是由Classes
生成,但是在Objective-C
中,Classes
本身也是objects
,也能处理消息,这也就是为什么有类方法和实例方法。