IGListKit 学习(1) 一种高效的 diff 算法

本文目录如图:

一、背景

近来因为业务需要,学习下如何更好的展示Feed流,而 IGListKit 是 Instagram 用来重构 Feed 流的开源库,可以实现在Feed流灵活的展示各种类型的数据,其中用到的 diff 算法是用来对比两个不同的数组的,使得可以在设置新数组时,界面只对有变化的数据进行更新。这个算法能做到时间复杂度为线性增长,是比较高效的算法。
下面分别介绍 IGListKit 参考的文献(也可以在这里下载)中介绍的算法以及 IGListKit 是如何用 Objective-C 来实现这个算法的。

SDWebImage 源码分析

对于著名的第三方库 SDWebImage 我们都不陌生,它在 Github 上的功能介绍是:

  1. 提供UIImageView的一个分类,以支持网络图片的加载与缓存管理
  2. 提供一个异步的图片加载器
  3. 提供一个异步的内存+磁盘图片缓存,并会自动处理缓存过期问题

OC中Method Swizzling的原理及应用

一、前言:

我们知道如果要在没有一个类的实现源码的情况下,要改变某方法的实现,可以通过:
(1)继承该类然后用子类重写的方法,这个比较常用;
(2)也可以为该类添加分类(category),实现一个同名方法覆盖原方法,这个很少用,因为这样也会影响该类的子类调用它的方法。
这里要介绍第三种方法,就是利用Objective-C强大的runtime特性实现的——Method Swizzling。

修饰 outlet 用 Strong 还是 Weak?

Outlet是一个对象的属性(property),这个属性引用了另外一个对象(在nib文件中),它们的引用关系被Interface Builder记录着,每次nib文件被使用来生成视图时,这些引用关系都会被创建,使得该nib文件中的对象与另一个对象中被标记为outlet的属性产生联系.如:

1
@interface GallantViewController : UIViewController
2
@property (nonatomic, weak) IBOutlet UISwitch *switch;
3
@end