iOS开发常用的第三方框架
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特别简单。
详情请参考:AFNetworking官网
2.GPUImage
GPUImage是一个基于GPU图像和视频处理的开源iOS框架。
主要功能如下:
- 提供各种各样的图像处理滤镜,并且支持照相机和摄像机的实时滤镜;
- GPUImage顾名思义,是基于GPU的图像加速,因此图像处理速度非常快,并且能够自定义图像滤镜;
- 支持ARC。
详情请参考:GPUImage官网
3.SVProgressHUD
作用:
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)( * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ //第三方框架
[SVProgressHUD dismiss];
//判断用户名和密码
if ([self.userTextField.text isEqualToString:@""] && [self.passwordTextField.text isEqualToString:@""]) {
//密码正确,跳转
[self performSegueWithIdentifier:@"login2contact" sender:nil];
}
else {
//密码错误
[SVProgressHUD showErrorWithStatus:@"密码错误..."];
}
});
}
详情见SVProgressHUD官网
4.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 解析器,只包含两个文件
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()
make.center.equalTo(self.view)
}
} }
SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star
iOS开发常用的第三方框架的更多相关文章
- iOS开发常用的第三方类库
在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...
- 【转】iOS开发常用的第三方类库
原文: http://blog.csdn.net/xiazailushang/article/details/9716043 在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使 ...
- 整理iOS开发常用的第三方资源
一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...
- 提高iOS开发效率的第三方框架等--不断更新中。。。
1. Mantle Mantle 让我们能简化 Cocoa 和 Cocoa Touch 应用的 model 层.简单点说,程序中经常要进行网络请求,请求到得一般是 json 字符串,我们一般会建一个 ...
- 提高iOS开发效率的第三方框架等
http://zhangmingwei.iteye.com/blog/2208783 http://www.kuqin.com/shuoit/20150703/346900.html
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- iOS开发常用第三方库
UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...
- IOS开发常用设计模式
IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们 ...
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
随机推荐
- 为Ubuntu配置ssh服务 方便远程登陆
Ubuntu系统必须开启ssh服务后,XP或者其他的主机才可以远程登陆到Ubuntu系统. 1,安装软件包,执行sudo apt-get install openssh-server Ubuntu缺省 ...
- MYSQL的硬盘IO过高引起的CPU过高判断
其实,为客户提供相关日志,不就是RACKSPACE主要作的事? 俺们以后也可以效仿的.不要去解决,而是协助客户定位. http://blog.const.net.cn/a/17275.htm 上文的思 ...
- 石英晶振频率后面带的PPM是什么单位
PPM是石英晶振的基本单位之一,表示晶振的精度和相对偏差, PPM代表着百万分之一,它表明晶体的频率可能会偏离标称值多少.晶振频率是以MHZ(10的6次方)和KHZ(10的3次方)为基本单位的,标称频 ...
- AES加密跨平台出现的问题
javax.crypto.BadPaddingException: Given final block not properly padded at com.sun.crypto.provider.S ...
- [置顶] 2014年八大最热门IT技能
根据Computerworld网站组织的年度预测调查,众多IT专业人士在2014年所面临的整体就业形势与今年基本持平——今年有33%的企业有计划增加IT部门的员工数量,而未来一年则有32%的企业有此打 ...
- 【HDOJ】3325 Arithmetically Challenged
简单DFS. /* 3325 */ #include <iostream> #include <set> #include <cstdio> #include &l ...
- ssh日志记录
上天查看了服务器安全日志,防火墙屏蔽了处理了一些暴力破解ssh密码的ip(其中一个ip地址为北京一家有名的CDN服务提供商),然后删除了所有的/var/log/secure* 日志文件.今天再来查看日 ...
- 西安Uber优步司机奖励政策(1月18日~1月24日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Servlet线程安全
public class servletDemo1 extends HttpServlet { int i=0; public void doGet(HttpServletRequest reques ...
- Mysql学生管理系统:表的建立,外键一对多,多对多关系,中间关联表的建立
学生管理系统 管理员注册/登录/注销 注册班级(班级详细信息) 注册学生信息 查看班级信息/查看老师资料 教师注册/注销 查看教师资料 查看学生资料 根据名称/班级/ 查看学生详细信息--支持模 ...