最近在学习YYCache
中的YYDiskCache
时,注意到了这段代码:
|
|
这篇文章并不是对YYCache的设计思路的范范分析,而是对YYCache代码实现的详细分析。一方面YYCache的设计思路作者已经写得比较清楚了,我就没必要再多此一举了,有兴趣的可以到大神的博客去看YYCache 设计思路。从代码层面进行分析,一方面是因为很多思路上的东西很虚理解起来大都很容易,但是要能用代码实现却往往不那么轻松,另一方面是因为代码分析可以学习优秀代码的编码风格以及加深对iOS技术上的理解,这样做给自己带来的帮助或许会更多。
代码结构
YYCache文件数并不多,主要包含四个文件:
- YYCache
- YYDiskCache
- YYMemoryCache
- YYKVStorage
最近做项目过程中版本适配到iOS 7上出现了一点问题,定位分析了一下发现原来是NSstring
的containsString:
方法在从中作梗。看了一下文档发现原来containsString:
是从iOS 8才加入的,iOS 7 SDK并没有该方法。这个问题解决起来也挺简单的,在iOS 7下可以用如下代码代替containsString:
方法:
|
|
不过,我觉得要在每一个需要调用containsString:
方法写一遍有点麻烦,把适配的代码抽离出来写入一个方法倒是可以,但我还是觉得有点麻烦,毕竟懒癌患者。于是,我想到了用runtime运行时机制动态添加containsString:
方法就可以一劳永逸了。
实现的原理也很简单,在iOS 7下判断NSString
中是否存在containsString:
实例方法,若不存在,则动态添加该方法。这样就不用再需要调用containsString:
实例方法去判断了。原理很简单,代码也很简单,还是很符合我这个懒癌患者的口味的嘛。
第一部分 准备阶段
1)硬件要求:
iPhone6及更新的设备,还有iPad air2和iPad mini3之后的平板,以及apple watch。具体型号(截止2016年2月):iPhone 6,iPhone 6 Plus,iPhone 6s, iPhone 6s Plus;iPad Air 2,iPad mini 3,iPad mini 4,iPad Pro;还有Apple Watch。
2)系统要求:
iPhone或iPad至少要升到iOS 9.2版,手表至少watch OS 2.1。
3)配置支付环境
1.进入苹果开发者中心,注册App ID。
App ID必须是explicit类型,否则无法使用ApplePay服务。