前面两篇博文中,简要对SDWebImage的缓存部分多线程部分进行了分析。建议在阅读本篇内容前先看下缓存策略那篇,以对SDWebImage的基本内容有所了解。在本篇中,我们将对它的网络策略进行分析。我们知道SDWebImage的主要功能就是从远程主机上下载图片,所以前面的几个策略都是为这一目的提供支持的,而网络策略的好坏将直接决定库的性能。不过SDWebImage以GitHub上接近20000的star数向我们证明了它不俗的实力,下面就让我们一起看看吧。继续阅读

在上一篇文章中,我们对Masonry 的源代码进行了分析。今天我们将对另外一个在iOS 开发中广泛使用的库的源代码进行分析,这个库就是鼎鼎大名的SDWebImage。下面是我个人对这个库的主要部分和缓存策略部分的代码分析和理解。由于本人才疏学浅,若有错误,请大家及时指出,不吝赐教。(注:由于写这篇博客的时间是17年3月,从那之后SDWebImage又历经了几个新的版本,因此现在的代码与这篇博客中会有所不同。)继续阅读

block 是Apple 为C语言提供的语言扩展,其实质是:带有自动变量的匿名函数。block 在iOS的动画、异步网络请求以及GCD等中被广泛使用。但是,它的语法却有点复杂,有人甚至专门做了一个网站来记录block 的用法,从网址中就可以看出block 的语法有多令人生畏了。

继续阅读

概述

动态 vs 静态语言

Objective-C 是一门动态语言,刚接触Objective-C 的时候,你一定会为它使用方括号这种怪异的“函数调用”方式而感到惊讶。准确的说,Objective-C 中的如下语句

并不等同于C语言中的函数调用,而是向receiver 对象发送message 消息。C语言中的函数调用是在编译期间确定的,而Objective-C 是一门面向 Runtime 的语言,也就是说,它把消息发送的时机从编译&链接时延后到了运行时。这正是Objective-C 众多的黑魔法的源头所在。继续阅读

Objective-C 提供了两种内存管理的方法,一是 ARC ,即 Automatic Reference Counting,二是 MRR,即 Manual Retain-release。苹果官方推荐的方法是 ARC,因为使用 ARC 时,我们不需要考虑这些复杂的管理过程,编译器会在编译时自动帮我们加上对应的代码。

继续阅读