J_Knight_

每天进步一点点


  • 首页

  • 分类

  • 归档

  • 标签

SDWebImage源码解析

发表于 2017-01-24 | 分类于 iOS
字数统计 4,258 字 | 阅读时长 20 分钟

相信对于广大的iOS开发者,对SDWebImage并不会陌生,这个框架通过给UIImageView和UIButton添加分类,实现一个异步下载图片并且支持缓存的功能。整个框架的接口非常简洁,每个类的分工都很明确,是很值得大家学习的。

在使用这个框架的时候,只需要提供一个下载的url和占位图就可以在回调里拿到下载后的图片:

1
2
3
4
5
6
[imageview sd_setImageWithURL:[NSURL URLWithString:@"pic.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder"] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

imageview.image = image;
NSLog(@"图片加载完成");

}];

而且我们还可以不设置占位图片,也可以不使用回调的block,非常灵活:

1
2
//图片下载完成后直接显示下载后的图片
[imageview sd_setImageWithURL:[NSURL URLWithString:@"pic.jpg"]];

在最开始先简单介绍这个框架:

这个框架的核心类是SDWebImageManger,在外部有UIImageView+WebCache 和 UIButton+WebCache 为下载图片的操作提供接口。内部有SDWebImageManger负责处理和协调 SDWebImageDownloader 和 SDWebImageCache:SDWebImageDownloader负责具体的下载任务,SDWebImageCache负责关于缓存的工作:添加,删除,查询缓存。

首先我们大致看一下这个框架的调用流程图:

SDWebImage

从这个流程图里可以大致看出,该框架分为两个层:UIKit层(负责接收下载参数)和工具层(负责下载操作和缓存)。

OK~基本流程大概清楚了,我们看一下每个层具体实现吧~

阅读全文 »

MBProgressHUD源码解析

发表于 2017-01-18 | 分类于 iOS
字数统计 3,043 字 | 阅读时长 13 分钟

听过好多次:“程序员要通过多读好的源码来提升自己”这样类似的话,而且又觉得自己有很多不会的,于是就马上启动了自己的读好源码Project。

从哪个框架开始呢?我想到了SDWebImage,但是大致看下来文件很多,代码也不少,不知道从何看起,于是作罢。所以茅塞顿开,还是从最最简单的框架开始吧~因为学习曲线要给自己设定得平缓一点才有利于稳步提升,小步快跑才是王道~

阅读全文 »

2016年终总结 | 善于总结,把握方向

发表于 2016-12-30 | 分类于 Career
字数统计 4,069 字 | 阅读时长 14 分钟

记得去年这个时候看到很多同行写了年终总结,当时只工作了1个月的我觉得很是高大上。转眼一年过去了,从第一家公司来到现在的这家公司,无论技术上还是思想上都成熟了一些,巧的是简书在这个时候给我们这个平台来写年终总结。贵在参与,也为了自己,写一篇吧~

GoodBye 2016,Welcome 2017

2016年,是我事业起步的第一年,现在回头看去,这一年大致分为五个时期:

  1. 技术基础建设期(1月~5月):从iOS小白的小白到独立上线app。
  2. 技术快速成长期(6月~9月):简书更新30篇文章,粉丝达到1000+。
  3. 写简历找工作期(10月):8家面试,3个offer。
  4. 适应新的公司期(11月):新项目1个月内上架。
  5. 明年方向定位期(12月):决定研究Hybrid app开发。

下面开始按时间顺序分别总结一下每个时期里我的所做所思。

阅读全文 »

2016年10月求职记 | iOS工作经验不到1年,在1个月内拿到了3个offer

发表于 2016-11-08 | 分类于 Career
字数统计 3,464 字 | 阅读时长 12 分钟

真的是非常非常感谢我的新东家,在我最需要新工作的时候给我抛来橄榄枝~

新东家的知名度很高,但并不是做互联网起家的,是一家有自己线下产业的大公司,创立时间也比较久,新项目(互联网)的技术团队组成非常优秀,所以虽然给我的待遇并没有很多,但还是毫不犹豫选择了这一家。为此还谢绝了后面的面试邀请(因为要准备一些入职材料和入职之前的相关学习)。

笔者在国庆节期间准备简历,在国庆节后开始投递简历。从最开始投递简历到拿到最后一个offer历时3周多。因为在这段求职时间里感触很多,所以想专门写一篇博客来讲述一下自己的求职心得,希望能给各位年底求职的小伙伴,特别是做iOS的同行一些值得借鉴的东西。

图片来自:pixabay.com

阅读全文 »

高度封装FMDB框架:各用一句代码更新(添加&修改),查询,删除用户信息

发表于 2016-10-10 | 分类于 Production
字数统计 3,100 字 | 阅读时长 12 分钟

在移动开发中,有时不得不在客户端本地保存一些数据。在iOS端,我们可以使用plist,属性列表等技术来存储数据,而相比而下更高端一点的,我们也可以使用数据库来存储数据。

有趣的是,很多iOS开发者没有去选择使用苹果自家的Core Data技术来操作数据库,而是选择了FMDB)这个第三方框架。

该框架很好地封装了操作繁琐的SQLite语句,让数据库的操作更加面向对象,而且上手快,门槛低,不用学习数据库的相关知识就可以使用自如。如此优秀流行的框架是值得学习的,于是笔者这两天研究了一下FMDB。研究后,略有所思,将它封装了一下,写了一个Manager类,最后结合了一个Demo演示如何使用这个类。

该博客分为两个部分:第一个部分讲解笔者封装的这个Manager类;第二部分结合Demo来体现该类的实用性。

阅读全文 »

详解iOS多图下载的缓存机制

发表于 2016-09-19 | 分类于 iOS
字数统计 2,704 字 | 阅读时长 10 分钟

做iOS开发也有半年多了,想想自己对一些第三方库还只是停留在简单运用的阶段,感觉心慌慌的。于是决定用一个月的时间深入了解一些好的第三方库。

第一个想到了SDWebImage,这个库很不错,几乎每个iOS项目都会有它的影子,因为它很完美地解决了下载图片并显示的处理逻辑。那么深究它之前,笔者准备先了解一下多图下载的缓存机制,因为它和SDWebImage的方案类似。

有一个多图缓存机制的教程是来自李明杰小码哥的,笔者觉得讲得挺不错的,于是就花了2个小时好好学习了一下。

阅读全文 »

《Effective Objective-C》超级干货三部曲(三):技巧篇

发表于 2016-09-19 | 分类于 iOS
字数统计 7,457 字 | 阅读时长 30 分钟

《Effective Objective-C 编写高质量iOS与OS X代码的52个有效方法》

《Effective Objective-C 》超级干货三部曲系列迎来了最后一篇:技巧篇,这一篇总结汇总了这本书中一些用来解决问题的偏向“设计模式”的知识点。

不知道笔者所谓的三部曲的童鞋们可以看一下这张图:

三部曲分布图

前两篇传送门:
《Effective Objective-C 》超级干货三部曲(一):概念篇
《Effective Objective-C 》超级干货三部曲(二):规范篇

阅读全文 »

《Effective Objective-C》超级干货三部曲(二):规范篇

发表于 2016-09-09 | 分类于 iOS
字数统计 8,356 字 | 阅读时长 33 分钟

《Effective Objective-C 编写高质量iOS与OS X代码的52个有效方法》

继上一篇《Effective Objective-C 》超级干货三部曲(一):概念篇之后,本篇即是三部曲的第二篇:规范篇。
没看过三部曲第一篇的小伙伴可能不知道我在说神马,在这里还是先啰嗦一下三部曲是咋回事:笔者将《Effective Objective-C 》这本书的52个知识点分为三大类进行了归类整理:

  • 概念类:讲解了一些概念性知识。
  • 规范类:讲解了一些为了避免一些问题或者为后续开发提供便利所需要遵循的规范性知识。
  • 技巧类:讲解了一些为了解决某些特定问题而需要用到的技巧性知识。

然后用思维导图整理了一下:
三部曲分布图

作为三部曲的第二篇,本篇总结抽取了《Effective Objective-C 》这本书中讲解规范性知识的部分:这些知识点都是为了避免在开发过程中出现问题或给开发提供便利的规范性知识点。掌握这些知识有助于形成科学地写OC代码的习惯,使得代码更加容易维护和扩展,学习这类知识是iOS初学者进阶的必经之路。

好吧,不费话了,开始了!

阅读全文 »

《Effective Objective-C》超级干货三部曲(一):概念篇

发表于 2016-09-05 | 分类于 iOS
字数统计 5,589 字 | 阅读时长 22 分钟

《Effective Objective-C 编写高质量iOS与OS X代码的52个有效方法》

很多文章和大牛都在推荐这本书,说它讲授了很多编写Objective-C语言时所应该遵循的规范。刚好笔者前段时间因为产品刚开发完,有了一点空档期,于是用了3个星期的时间仔细研读和总结了这本书。

在学习过程中也看过很多总结这本书的博客和文章,但是发现多数只是将每节的总结部分抄了过来,讲得并不是很详细,于是笔者就想按照自己的方式对这本书进行总结,并以博客的形式展现出来:既能分享,同时又能对知识进行一下梳理和二次复习。

虽然本书的作者按照知识模块来将这本书分成七个章节,共52节,但是笔者在拜读的过程中发现本书介绍的知识点可以大致分为三类:概念类,规范类,和技巧类。笔者打算按照这三类来对这本书进行总结,形成三部曲:

  • 概念类:讲解了一些概念性知识。
  • 规范类:讲解了一些为了避免一些问题或者为后续开发提供便利所需要遵循的规范性知识。
  • 技巧类:讲解了一些为了解决某些特定问题而需要用到的技巧性知识。

而且,笔者也按照自己的归类将这本书的结构用思维导图工具画了出来:

三部曲分布图

从图中可以看到,笔者并没有打乱原来作者的标题顺序。本篇总结即是三部曲之一:概念篇,后续会呈上规范篇和技巧篇。
备注:本总结所有的代码和图片都来自原书。其中,代码会适当加上笔者的注释,便于各位看官理解。

好了,不啰嗦了, 开始吧!

阅读全文 »

斯坦福大学iOS开发公开课总结(十八):国际化,自定义设置UI

发表于 2016-08-16 | 分类于 iOS
字数统计 2,025 字 | 阅读时长 8 分钟

本篇是斯坦福大学iOS7系列课程(CS193P)的最后一节课的总结,终于把18节课的内容都总结完了,而且这个文集也画上了句号,有点不舍的赶脚。。

好了,不煽情了,开始!

阅读全文 »

斯坦福大学iOS开发公开课总结(十七):CoreMotion,app的生命周期,方块碰撞游戏Demo

发表于 2016-08-06 | 分类于 iOS
字数统计 2,058 字 | 阅读时长 9 分钟

本节课讲解了Core Motion框架的知识,简单介绍了app的生命周期,最后用一个方块碰撞游戏来对本节课的知识作总结。

Core Motion


CoreMotion是一个专门处理设备“动作”的框架,其中包含了加速度计,陀螺仪和磁力针。加速计由三个坐标轴决定,用户最常见的操作设备的动作移动,晃动手机(摇一摇),倾斜手机都可以被设备检测到,加速计可以检测到线性的变化。陀螺仪可以更好的检测到偏转的动作,可以根据用户的动作做出相应的动作;磁力针可以判断设备的方向。

CoreMotion的工作是基于CMMotionManager类来执行的。我们看一下该类的API:

CMMotionManager

检测硬件设备:

1
2
3
4
@property(readonly, nonatomic, getter=isAccelerometerAvailable) BOOL accelerometerAvailable __TVOS_PROHIBITED;
@property(readonly, nonatomic, getter=isGyroAvailable) BOOL gyroAvailable __TVOS_PROHIBITED;
@property(readonly, nonatomic, getter=isMagnetometerAvailable) BOOL magnetometerAvailable NS_AVAILABLE(NA,5_0) __TVOS_PROHIBITED;
@property(readonly, nonatomic, getter=isDeviceMotionAvailable) BOOL deviceMotionAvailable __TVOS_PROHIBITED;
阅读全文 »

斯坦福大学iOS开发公开课总结(十六):模态视图,UITextField,UImagePickerController,在Flickr添加摄影师照片Demo

发表于 2016-08-01 | 分类于 iOS
字数统计 2,680 字 | 阅读时长 12 分钟

本节课讲解了模态视图,文本框,UImagePickerController的相关知识,并延续了上一节课的Demo,添加了照相并存储照片的功能。

模态视图


模态视图不同于左右滑入的视图,它是从下往上,覆盖整个屏幕的视图。每次滑入都会重新新建一个控制器。通常用于修改信息等操作。

显示模态视图:

1
  [self presentViewController:(nonnull UIViewController *) animated:(BOOL) completion:^{}];

让模态视图消失:

1
- (void)dissmissViewControllerAnimated:(BOOL)animated completion:(void(^))block;

注意:该消息是发送给present该模态视图的控制器,而不是该模态视图本身。因此,调用方法应该是:

1
[self.presentingViewController dissmissViewControllerAnimated:YES ...];
阅读全文 »

斯坦福大学iOS开发公开课总结(十四 十五):CoreLocation,MapKit,在地图上标识Flickr摄影师的作品

发表于 2016-07-27 | 分类于 iOS
字数统计 2,808 字 | 阅读时长 12 分钟

本总结将第十四和十五课放在了一起,原因有二:第一是略去了ipad开发Demo的部分(因为笔者木有ipad,无法进行调试)。第二是两节课都讲解了关于地图框架的相关知识,故将二者放在一起总结。

在本篇总结的最后,会给大家讲解在地图上显示Flickr上摄影师的照片作品。

Network Activity Indicator


顾名思义,该控件叫做网络活动指示器。当app有网络活动时,可以让状态栏左边的小圆圈滚动用来提示用户当前的网络状态。

1
@property(nonatomic,getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible;

如果设定为YES,状态栏上的小转轮就会转,反之亦然。

注意:应用中的所有线程都可使用这个转轮,我们需要通过各种方法来向用户准确显示转轮的状态。

阅读全文 »

浅显易懂讲解iOS多线程技术-GCD

发表于 2016-07-20 | 分类于 iOS
字数统计 4,061 字 | 阅读时长 15 分钟

励志打造一篇浅显易懂地介绍iOS中GCD的文章!
笔者见过很多其他讲解GCD的博客,有些写得非常详细非常专业,几乎涵盖了GCD大大小小的全部知识,细致庞杂的内容容易让人摸不清主次,笔者觉得这类文章并不适合初学者学习,于是决定写一篇针对一些只是听过,但是对GCD还不了解的童鞋们。

本文排除了一些细枝末节,扰乱人头绪的东西,着重讲解了GCD中重要的知识点,并在最后展示了GCD中经常使用的函数并附上结果图和讲解,简单明了。

阅读全文 »

斯坦福大学iOS开发公开课总结(十二 十三):CoreData,表格视图,Flickr摄影师资料列表Demo

发表于 2016-07-18 | 分类于 iOS
字数统计 2,065 字 | 阅读时长 8 分钟

第十二课和第十三课都介绍了CoreData的知识,并在十三课的中段通过一个Demo来具体实现了CoreData的操作。

笔者之前从未接触过Core Data的相关知识,因此学期这两节课比较吃力,这一篇总结还是有很多需要改进的地方,以后随着对Core Data认识的深入和对这两节课的反复咀嚼,会不断更新该总结。

开始吧!

阅读全文 »
12345
J_Knight_

J_Knight_

iOS开发,正在研究设计模式 | 下方的RSS已修复,欢迎订阅

61 日志
7 分类
17 标签
RSS
GitHub Weibo 掘金 简书
© 2019 J_Knight_
由 Hexo 强力驱动
主题 - NexT.Pisces