iOS开发常用的第三方框架
2015-11-21 23:33
435 查看
1. AFNetworking
在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目。AFNetworking是一个轻量级的iOS、Mac OS X网络通信类库,现在是GitHub上第三大Objective-C库。它建立在NSURLConnection、NSOperation等类库的基础 上,让很多网络通信功能的实现变得十分简单,因此,许多iOS应用开发都会使用到它。
使用功能:
支持HTTP请求和基于REST的网络服务(包括GET、POST、PUT、DELETE等);
支持ARC;
要求iOS 5.0及以上版本;
有一些插件扩展已有的功能,还有一个功能齐全的API;
从URL中获取JSON特别简单。
1>实现原理
AFN的直接操作对象AFHTTPClient不同于ASI,是一个实现了NSCoding和NSCopying协议的NSObject子类。 AFHTTPClient是一个封装了一系列操作方法的“工具类”,处理请求的操作类是一系列单独的,基于NSOperation封装 的,AFURLConnectionOperation的子类。AFN的示例代码中通过一个静态方法,使用dispatch_once()的方式创建 AFHTTPClient的共享实例,这也是官方建议的使用方法。在创建AFHTTPClient的初始化方法中,创建了OperationQueue并 设置一系列参数默认值。在getPath:parameters:success:failure方法中创建NSURLRequest,以 NSURLRequest对象实例作为参数,创建一个NSOperation,并加入在初始化发方中创建的NSOperationQueue。以上操作都 是在主线程中完成的。在NSOperation的start方法中,以此前创建的NSURLRequest对象为参数创建NSURLConnection 并开启连结。
2> 传递指针 如何使一个方法返回多个返回值
详情请参考:[b]AFNetworking官网[/b]
[b]2.[b]GPUImage[/b][/b]
[b][b]GPUImage是一个基于GPU图像和视频处理的开源iOS框架。[/b][/b]
主要功能如下:
提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜;
GPUImage顾名思义,是基于GPU的图像加速,因此图像处理速度非常快,并且能够自定义图像滤镜;
支持ARC。
[b][b]详情请参考:GPUImage官网[/b][/b]
[b][b]3.[b]SVProgressHUD[/b][/b][/b]
[b][b][b]作用:[/b][/b][/b]
1>实现多种HUD效果。多用于程序正在执行耗时较长命令,需要用户等待。
2>除了显示等待的HUD,还可以显示命令执行成功或者失败的HUD。
3>SVProgressHUD和MBProgressHUD效果差不多,不过不需要使用协议,同时也不需要声明实例。
直接通过类方法进行调用即可
4>SVProgressHUD 使用起来很方便,但可定制差一些,看它的接口貌似只能添加一个全屏的HUD,不能把它添加到某个视图上面去.
示例代码:
[b][b][b]详情见[b][b][b][b]SVProgressHUD[/b][/b][/b][/b][/b][/b][/b]官网
4.SDWebImage:
1> SDWebimage的缓存机制
UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。
SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类, SDImageCache: queryDiskCacheForKey:delegate:userInfo:用来从缓存根据CacheKey查找图片是否已经在缓存中
如果内存中已经有图片缓存, SDWebImageManager会回调SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:
而 UIImageView+WebCache 则回调SDWebImageManagerDelegate: webImageManager:didFinishWithImage:来显示图片。
如果内存中没有图片缓存,那么生成 NSInvocationOperation 添加到队列,从硬盘查找图片是否已被下载缓存。
根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调
notifyDelegate:
如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:进而回调展示图片。
如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调
imageCache:didNotFindImageForKey:userInfo:
共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。
图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。
connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。
connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。
图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。
在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。
imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。
通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。
将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。
写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程。
如果是在iOS上运行,SDImageCache 在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification 以及 UIApplicationWillTerminateNotification,在内存警告的时候清理内存图片缓存,应用结束的时候清理过期图片。
SDWebImagePrefetcher 可以预先下载图片,方便后续使用。
一、SDWebImage常见面试题
1.问题: 1> 图片文件缓存的时间有多长
答案: 一周
2.SDWebImage的内存缓存是用什么实现的
答案: NSCache
3.SDWebImage的最大并发数是多少
答案:6
4.SBWebImage 支持动图嘛??
答案:GIF
5.SDWebImage是如何区别不同格式的图像
答案:根据图像数据第一个字节来判断
PNG: 压缩比没有JPG高,但是无损压缩,解压性能高,苹果推荐的图像格式
CIF 序列帧动画,特点.只支持256中颜色,是最流行的时候载1998-1999 有专利的
6 SDWebImage 缓存图片的名称是怎么确定的
md5 在终端输入md5 -s 输入你的图片地址,即可寻找
如果单纯使用 文件名保存, 重名几率高
使用MD5的散列函数,对完整的URL进行MD5,结果是一个32个字符长度的字符串
7. SBWebimage的内存警告是如何处理的
利用通知中心观察
二、主要用于网络异步下载图片框架
SDWebImage库的作用:
通过对UIImageView的类别扩展来实现异步加载替换图片的工作。
主要用到的对象:
1>、UIImageView (WebCache)类别,入口封装,实现读取图片完成后的回调
2>、SDWebImageManager,对图片进行管理的中转站,记录那些图片正在读取。
向下层读取Cache(调用SDImageCache),或者向网络读取对象(调用SDWebImageDownloader) 。
实现SDImageCache和SDWebImageDownloader的回调。
3>、SDImageCache,根据URL的MD5摘要对图片进行存储和读取(实现存在内存中或者存在硬盘上两种实现)
实现图片和内存清理工作。
4>、SDWebImageDownloader,根据URL向网络读取数据(实现部分读取和全部读取后再通知回调两种方式)
详情见SDWebImage官网
5.GDataXML
XML解析器
这是一套Google开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询。
GDataXML 是 iOS 下的一款轻量级 XML 解析器,只包含两个文件
GDataXMLNode.h GDataXMLNode.m
使用方法:
1>、获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
2>、向工程中增加“libxml2.dylib”库
3>、在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2"到路径中
4>、添加“GDataXMLNode.h”文件到头文件中,如工程能编译通过,则说明GDataXMLNode添加成功
详情见GDataXML官网或见GDataXML博客地址
6.Security(网络安全框架)
包含管理证书、公钥私钥以及信任策略的接口。请查看Security框架参考。
[b]链接地址:Security(网络安全框架)[/b]
[b]7.SSKeychain(钥匙串访问框架)[/b]
[b]用于账号密码的存取[/b]
[b]SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码、账户进行访问,包括读取、删除和设置。SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes。[/b]
[b]项目地址:SSKeyChains[/b]
8.Reachability(判断网络是否连接)
[b]判断设备网络连接情况。相对于苹果官方的Reachability,这是一个更加高级、更加好用的Reachability,支持ARC、支持block、使用GCD方式来通知网络的变化[/b]
[b]项目地址:Reachability[/b]
[b]9.SnapKit:[/b]
[b]SnapKit是能让开发者在iOS和OS X上更简单地进行Auto Layout的DSL。[/b]
[b]使用的代码示例:[/b]
SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star
[b]项目下载地址:[b]SnapKit[/b][/b]
[b][b]10.Masonry[/b][/b]
[b][b]Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。[/b][/b]
[b][b]项目下载地址:https://github.com/SnapKit/Masonry[/b][/b]
在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目。AFNetworking是一个轻量级的iOS、Mac OS X网络通信类库,现在是GitHub上第三大Objective-C库。它建立在NSURLConnection、NSOperation等类库的基础 上,让很多网络通信功能的实现变得十分简单,因此,许多iOS应用开发都会使用到它。
使用功能:
支持HTTP请求和基于REST的网络服务(包括GET、POST、PUT、DELETE等);
支持ARC;
要求iOS 5.0及以上版本;
有一些插件扩展已有的功能,还有一个功能齐全的API;
从URL中获取JSON特别简单。
1>实现原理
AFN的直接操作对象AFHTTPClient不同于ASI,是一个实现了NSCoding和NSCopying协议的NSObject子类。 AFHTTPClient是一个封装了一系列操作方法的“工具类”,处理请求的操作类是一系列单独的,基于NSOperation封装 的,AFURLConnectionOperation的子类。AFN的示例代码中通过一个静态方法,使用dispatch_once()的方式创建 AFHTTPClient的共享实例,这也是官方建议的使用方法。在创建AFHTTPClient的初始化方法中,创建了OperationQueue并 设置一系列参数默认值。在getPath:parameters:success:failure方法中创建NSURLRequest,以 NSURLRequest对象实例作为参数,创建一个NSOperation,并加入在初始化发方中创建的NSOperationQueue。以上操作都 是在主线程中完成的。在NSOperation的start方法中,以此前创建的NSURLRequest对象为参数创建NSURLConnection 并开启连结。
2> 传递指针 如何使一个方法返回多个返回值
详情请参考:[b]AFNetworking官网[/b]
[b]2.[b]GPUImage[/b][/b]
[b][b]GPUImage是一个基于GPU图像和视频处理的开源iOS框架。[/b][/b]
主要功能如下:
提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜;
GPUImage顾名思义,是基于GPU的图像加速,因此图像处理速度非常快,并且能够自定义图像滤镜;
支持ARC。
[b][b]详情请参考:GPUImage官网[/b][/b]
[b][b]3.[b]SVProgressHUD[/b][/b][/b]
[b][b][b]作用:[/b][/b][/b]
1>实现多种HUD效果。多用于程序正在执行耗时较长命令,需要用户等待。
2>除了显示等待的HUD,还可以显示命令执行成功或者失败的HUD。
3>SVProgressHUD和MBProgressHUD效果差不多,不过不需要使用协议,同时也不需要声明实例。
直接通过类方法进行调用即可
4>SVProgressHUD 使用起来很方便,但可定制差一些,看它的接口貌似只能添加一个全屏的HUD,不能把它添加到某个视图上面去.
示例代码:
#import "SVProgressHUD.h" //登录按钮的点击事件 -(void)login { [SVProgressHUD showWithStatus:@"正在登陆..." maskType:SVProgressHUDMaskTypeBlack]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //第三方框架 [SVProgressHUD dismiss]; //判断用户名和密码 if ([self.userTextField.text isEqualToString:@"1"] && [self.passwordTextField.text isEqualToString:@"1"]) { //密码正确,跳转 [self performSegueWithIdentifier:@"login2contact" sender:nil]; } else { //密码错误 [SVProgressHUD showErrorWithStatus:@"密码错误..."]; } }); }
[b][b][b]详情见[b][b][b][b]SVProgressHUD[/b][/b][/b][/b][/b][/b][/b]官网
4.SDWebImage:
1> SDWebimage的缓存机制
UIImageView+WebCache: setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片。
SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+WebCache同SDImageCache链接起来的类, SDImageCache: queryDiskCacheForKey:delegate:userInfo:用来从缓存根据CacheKey查找图片是否已经在缓存中
如果内存中已经有图片缓存, SDWebImageManager会回调SDImageCacheDelegate : imageCache:didFindImage:forKey:userInfo:
而 UIImageView+WebCache 则回调SDWebImageManagerDelegate: webImageManager:didFinishWithImage:来显示图片。
如果内存中没有图片缓存,那么生成 NSInvocationOperation 添加到队列,从硬盘查找图片是否已被下载缓存。
根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调
notifyDelegate:
如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:进而回调展示图片。
如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调
imageCache:didNotFindImageForKey:userInfo:
共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。
图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。
connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。
connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。
图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。
在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。
imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。
通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。
将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。
写文件到硬盘在单独 NSInvocationOperation 中完成,避免拖慢主线程。
如果是在iOS上运行,SDImageCache 在初始化的时候会注册notification 到 UIApplicationDidReceiveMemoryWarningNotification 以及 UIApplicationWillTerminateNotification,在内存警告的时候清理内存图片缓存,应用结束的时候清理过期图片。
SDWebImagePrefetcher 可以预先下载图片,方便后续使用。
一、SDWebImage常见面试题
1.问题: 1> 图片文件缓存的时间有多长
答案: 一周
2.SDWebImage的内存缓存是用什么实现的
答案: NSCache
3.SDWebImage的最大并发数是多少
答案:6
4.SBWebImage 支持动图嘛??
答案:GIF
5.SDWebImage是如何区别不同格式的图像
答案:根据图像数据第一个字节来判断
PNG: 压缩比没有JPG高,但是无损压缩,解压性能高,苹果推荐的图像格式
CIF 序列帧动画,特点.只支持256中颜色,是最流行的时候载1998-1999 有专利的
6 SDWebImage 缓存图片的名称是怎么确定的
md5 在终端输入md5 -s 输入你的图片地址,即可寻找
如果单纯使用 文件名保存, 重名几率高
使用MD5的散列函数,对完整的URL进行MD5,结果是一个32个字符长度的字符串
7. SBWebimage的内存警告是如何处理的
利用通知中心观察
二、主要用于网络异步下载图片框架
SDWebImage库的作用:
通过对UIImageView的类别扩展来实现异步加载替换图片的工作。
主要用到的对象:
1>、UIImageView (WebCache)类别,入口封装,实现读取图片完成后的回调
2>、SDWebImageManager,对图片进行管理的中转站,记录那些图片正在读取。
向下层读取Cache(调用SDImageCache),或者向网络读取对象(调用SDWebImageDownloader) 。
实现SDImageCache和SDWebImageDownloader的回调。
3>、SDImageCache,根据URL的MD5摘要对图片进行存储和读取(实现存在内存中或者存在硬盘上两种实现)
实现图片和内存清理工作。
4>、SDWebImageDownloader,根据URL向网络读取数据(实现部分读取和全部读取后再通知回调两种方式)
详情见SDWebImage官网
5.GDataXML
XML解析器
这是一套Google开发的DOM方式XML解析类库,支持读取和修改XML文档,支持XPath方式查询。
GDataXML 是 iOS 下的一款轻量级 XML 解析器,只包含两个文件
GDataXMLNode.h GDataXMLNode.m
使用方法:
1>、获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
2>、向工程中增加“libxml2.dylib”库
3>、在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2"到路径中
4>、添加“GDataXMLNode.h”文件到头文件中,如工程能编译通过,则说明GDataXMLNode添加成功
详情见GDataXML官网或见GDataXML博客地址
6.Security(网络安全框架)
包含管理证书、公钥私钥以及信任策略的接口。请查看Security框架参考。
[b]链接地址:Security(网络安全框架)[/b]
[b]7.SSKeychain(钥匙串访问框架)[/b]
[b]用于账号密码的存取[/b]
[b]SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码、账户进行访问,包括读取、删除和设置。SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsoffes。[/b]
[b]项目地址:SSKeyChains[/b]
8.Reachability(判断网络是否连接)
[b]判断设备网络连接情况。相对于苹果官方的Reachability,这是一个更加高级、更加好用的Reachability,支持ARC、支持block、使用GCD方式来通知网络的变化[/b]
[b]项目地址:Reachability[/b]
[b]9.SnapKit:[/b]
[b]SnapKit是能让开发者在iOS和OS X上更简单地进行Auto Layout的DSL。[/b]
[b]使用的代码示例:[/b]
import SnapKit class MyViewController: UIViewController { lazy var box = UIView() override func viewDidLoad() { super.viewDidLoad() self.view.addSubview(box) box.snp_makeConstraints { (make) -> Void in make.width.height.equalTo(50) make.center.equalTo(self.view) } } }
SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star
[b]项目下载地址:[b]SnapKit[/b][/b]
[b][b]10.Masonry[/b][/b]
[b][b]Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。[/b][/b]
[b][b]项目下载地址:https://github.com/SnapKit/Masonry[/b][/b]
相关文章推荐
- ios7状态栏和导航条的一些设置
- iOS NSDate
- 文章标题
- (转)NSURLSession使用说明及后台工作流程分析
- 蓝懿 iOS 技术交流和心得分享 11.21
- 【iOS】NSString rangeOfString
- iOS开发实战tips--断点可以这样玩(debug)
- 谓词大揭秘
- 【iOS】NSNotification 常用方法
- iOS 四种存储方式的对比
- ios 异常处理(三)
- 类似9patch效果的iOS图片拉伸
- iOS应用程序内购/内付费(一)
- iOS 常用控件
- iOS 异常处理(二)
- ios键盘通知和自定义键盘
- 5种iOS编程中使用的设计模式
- iOS如何实现表格的折叠效果?
- iOS 心得十一 通知的那些事
- iOS 获得版本号 区分BundleVersion和BundleShortVersionString