从 SDWebImage 谈如何为开源软件做贡献
来源:伯乐在线 - 酷酷的哀殿
链接:http://ios.jobbole.com/89483/
从 SDWebImage 谈如何为开源软件做贡献
相识 – 知我者谓我心忧,不知我者谓我何求
今天和别人聊天时,扯到了这个非常著名的开源库。算算日子,我和 SDWebImage 已经认识 3 年零 11 个月了。将近四年的时间,说短不短,说长不长。
作为 iOS 开发者,我接触的第一个库就是 SDWebImage(第二个是 ASIHttpRequest),研究时间最长的也是 SDWebImage。
刚学完基础知识,开始做项目时,我就用到了这个图片缓存库。下面的代码是我从 SDWebImage 身上学到的第一个知识,也是最重要的一个知识:如何设计一个接受多个可选参数的方法,并让调用方能够简单地使用。
对于初出茅庐的我来说,这份代码带给我的除了上面的知识以外,我还学会了如何给现有的类写 扩展,第一次见识了
block
的 威力 ……
@implementation UIImageView (WebCache)
- (void)setImageWithURL:(NSURL *)url
{
[self setImageWithURL:url placeholderImage:nil];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
{
[self setImageWithURL:url placeholderImage:placeholder options:0];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(`SDWebImage`Options)options
{
`SDWebImage`Manager *manager = [`SDWebImage`Manager sharedManager];
// Remove in progress downloader from queue
[manager cancelForDelegate:self];
self.image = placeholder;
if (url)
{
[manager downloadWithURL:url delegate:self options:options];
}
}
#if NS_BLOCKS_AVAILABLE
- (void)setImageWithURL:(NSURL *)url success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;
{
[self setImageWithURL:url placeholderImage:nil success:success failure:failure];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;
{
[self setImageWithURL:url placeholderImage:placeholder options:0 success:success failure:failure];
}
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(`SDWebImage`Options)options success:(`SDWebImage`SuccessBlock)success failure:(`SDWebImage`FailureBlock)failure;
{
`SDWebImage`Manager *manager = [`SDWebImage`Manager sharedManager];
// Remove in progress downloader from queue
[manager cancelForDelegate:self];
self.image = placeholder;
if (url)
{
[manager downloadWithURL:url delegate:self options:options success:success failure:failure];
}
}
#endif
实际上,通过这个项目,你还可以学到更多,比如,如何通过 NSData 判断图片的类型,如何管理多线程队列……
相知 – 悲莫悲兮生别离,乐莫乐兮新相知
不知何时起,我注册了 github 账号,关注(watch)了这个开源项目。
对特定项目进行 watch 操作后,该项目任何新的 conversation(合并提交,创建新的 issue,有人回复 issue)都会产生一个未读通知。
随着我对它的了解也越来越深,我发现了一系列令人震惊的事实:
这个库仅仅是由两位开发者维护者更新
历史最悠久的未关闭 issue 出自 2011 年
几乎所有的版本都有大小不一的 bug(crash、获取错误的图片、回调无法执行……)这些事实一次次地令我感觉震撼,作为一个拥有 15824 个 star 的开源库,它是如此的脆弱。于是,我成为了一名志愿者,我努力地帮助开发者团队解决 issue。
相杀 – 消灭bug,是所有程序员的梦想
Bug 是所有程序员的噩梦,而上面的 bug,有很多是在特定情况下才会发生的,是无法仅仅依靠开发团队来避免的。作为该项目的成果享有者,我们是否可以做出一些自己的贡献呢?
大部分的开发者可能会觉得自己无法贡献代码。那么,我们是否可以充当该项目的测试人员呢?
我在下面简单的列出了一些普通开发者能做些什么(主要以 SDWebImage + CocoaPods 为例)。希望各位读者能够一起为开源软件做贡献。
SDWebImage
的当前版本号为3.8.2
在项目的短期开发分支使用 pod 'SDWebImage', '~> 3.8.2',并定期执行 pod update。
可以快速收到 bug 修复版本,可以帮助验证是否已经解决 bug。
在项目的长期开发分支使用 pod 'SDWebImage', '~> 3.8',并定期执行 pod update。
可以快速收到小的功能更新版本,可能需要修改项目代码,有较小的概率有 bug。
在新的项目中使用 pod 'SDWebImage', '~> 3',并定期执行 pod update。有重大版本更新时,有很大概率需要修改项目代码,有较大的概率有 bug。
定期根据版本更新修改 Podfile
发现相关bug 后,请及时创建 issue。点此创建
https://github.com/rs/%60SDWebImage%60/issues/new
后记
SDWebImage 4.0 版本已经在路上,该版本提供了更加细粒度的控制加载请求,兼容 Swift 3,使用了最新的 OC 语法……
从 SDWebImage 谈如何为开源软件做贡献的更多相关文章
- 使用eclipse开发工具与hibernate开发者为开源一起做贡献
本文作者:苏生米沿 本文地址:http://blog.csdn.net/sushengmiyan/article/details/50525363 hibernate使用的是gradle自动构建工具, ...
- NASA的CTO——开源软件使我们诚实
Chris C.Kemp,谷歌设置新职位CTO让他领导 原文: NASA's CTO: Open source software keeps us honest 作者: Shawn Freeman 译 ...
- OpenSSF的开源软件风险评估工具:Scorecards
对于IT从业者来说,Marc Andreessen 十年前提出"软件吞噬世界"的观点早已耳熟能详.无论是私人生活还是公共领域,软件为现代社会的方方面面提供动力,对现代经济和国家安全 ...
- 使用开源软件 enfuse 做照片的曝光合成
使用开源软件 enfuse 做照片的曝光合成 所谓曝光合成就是对同一场景用不同的曝光量拍摄多张照片,然后将这些照片再合成为一张照片.之所以我们要这么做是因为现在的相机感光的动态范围相比人眼实在是太小了 ...
- 为什么要做一款ERP软件——开源软件诞生7
技术之外的探讨--第7篇 用日志记录“开源软件”的诞生 赤龙ERP开源地址: 点亮星标,感谢支持,与开发者交流 kzca2000 码云:https://gitee.com/redragon/redra ...
- Python 浅谈编程规范和软件开发目录规范的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...
- python浅谈编程规范和软件开发目录规范的重要性
前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...
- spring boot 实战:我们的第一款开源软件
在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...
- 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
不知道从什么时候开始,很多一说起国产好像就非常愤慨,其实大可不必.做开源中国六年有余,这六年时间国内的开源蓬勃发展,从一开始的使用到贡献,到推出自己很多的开源软件,而且还有很多软件被国外的认可.中国是 ...
随机推荐
- c++builder XE8 线程 Thread
thread Thread c++builder XE8 / RAD 10 Settle delphi TThread.CreateAnonymousThread(MyMethod).Start; ...
- 网易及新浪IP查询接口
通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...
- DELPHI7在WIN8和WIN10下安装和运行
DELPHI7在WIN8下安装后可以打开运行,但发现设置断点DEBUG运行DLL工程时会卡死(IDE长时间无反应,不报错). DELPHI7在WIN10下安装后打开的时候会报错,无法运行. 以上两种情 ...
- Python对象(译)
这是一篇我翻译的文章,确实觉得原文写的非常好,简洁清晰 原文链接:http://effbot.org/zone/python-objects.htm ------------------------- ...
- Umbraco中更换IndexSet中的NodeType后,搜索页面没有做出对应更改的效果
在项目开发中,使用ExternalSearcher,有一个ExamineIndex.config文件中存放ExternalIndexSet 开始时是这样的 <!-- Default Indexs ...
- Base64把图片、文件转码成字符串(互转)
文件Base64以后会翻倍的涨,例如一张52kb的图片 base64以后string文件大小为185kb,在通过string转回图片为135kb 图片转文字: UIImage *_originIm ...
- android 48dp美化
48dp
- javaScript return false
在大多数情况下,为事件处理函数返回false,可以防止默认的事件行为.例如,默认情况下点击一个<a>元素,页面会跳转到该元素href属性指定的页. Return False 就相当于终止 ...
- linux环境新增用户和所属组
1.查看用户和组信息命令: 1.1 cat /etc/passwd /etc/passwd 存储有关本地用户的信息. 1)username UID到名称的一种映射,用户名 2)passw ...
- Oracle中decode方法的作用
DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) 该函数含义如下: IF 条件=值1 THEN RETURN (翻译值1) ELSIF 条件=值2 THEN ...