iOS中的第三方库

通过不断的学习也接触了不少的第三方库,就总结一下。

源代码分析:https://github.com/Draveness/iOS-Source-Code-Analyze

开源库
公开源代码,能看到具体实现
比如SDWebImage、AFNetworking

闭源库
不公开源代码,是经过编译后的二进制文件,看不到具体实现
主要分为:静态库、动态库

  1. 静态库和动态库的存在形式
    静态库:.a 和 .framework
    动态库:.dylib 和 .framework
    系统的 .framework 是动态库…..
    我们自己建立的 .framework 是静态库
  2. 静态库和动态库在使用上的区别
    静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝(左图所示)
    动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

页面布局

Masonry(重点)

概念

Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。

框架下载地址:

https://github.com/Masonry/Masonry

Masonry介绍与使用实践(快速上手Autolayout)

http://adad184.com/2014/09/28/use-masonry-to-quick-solve-autolayout/

案例讲解:

http://www.brighttj.com/ios/ios-masonry-demo.html#comment-353

使用方法:

http://www.ios122.com/2015/09/masonry/

常用方法:

1.三个添加约束方法区别
mas_makeConstraints 只负责新增约束 Autolayout不能同时存在两条针对于同一对象的约束 否则会报错
mas_updateConstraints 针对上面的情况 会更新在block中出现的约束 不会导致出现两个相同约束的情况
mas_remakeConstraints 则会清除之前的所有约束 仅保留最新的约束
三种函数善加利用 就可以应对各种情况了

2、两个赋值方法区别(equalTo 和 mas_equalTo)
#define equalTo(...)  mas_equalTo(__VA_ARGS__)
#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__))) 
mas_equalTo对其参数进行了一个自动装箱操作, 除了支持NSNumber数值类型之外还支持CGPoint CGSize UIEdgeInsets

MJRefresh

概念

下拉刷新和上拉刷新

代码地址

https://github.com/CoderMJLee/MJRefresh

SVPullToRefresh

概念

适用于UIScrollView,使用OC中的Runtime在UIScrollView中加了下面三个方法:
使用了 key-value observing(KVO)去追踪to track the scrollView’s contentOffset.

1
2
3
- (void)addPullToRefreshWithActionHandler:(void (^)(void))actionHandler;
- (void)addPullToRefreshWithActionHandler:(void (^)(void))actionHandler position:(SVPullToRefreshPosition)position;
- (void)addInfiniteScrollingWithActionHandler:(void (^)(void))actionHandler;

代码地址

https://github.com/samvermette/SVPullToRefresh

MBProgressHUD

  1. 动态提示框效果。应用显示一个过渡的作用,常用于打开一个联网页面加载过程,防止出现假死现象,如果网速慢则告诉用户已经在很努力很努力的加载中。网页加载、下载等耗时操作中给予用户以提示。
  2. github 地址:https://github.com/jdg/MBProgressHUD
  3. 讲解:http://blog.csdn.net/lanmanck/article/details/38496113
    http://blog.csdn.net/duxinfeng2010/article/details/8510894
    http://blog.csdn.net/chenyufeng1991/article/details/50273315

侧滑的菜单

https://github.com/mutualmobile/MMDrawerController
https://github.com/JPluto/DDMenuController

RESideMenu

手势解锁

https://github.com/iosdeveloperpanc/PCGestureUnlock
https://github.com/kejinlu/KKGestureLockView

折线图

https://github.com/core-plot/core-plot

数据存储

FMDB

  1. 什么是FMDB:
    FMDB是iOS平台的SQLite数据库框架;
    FMDB以OC的方式封装了SQLite的C语言API
  2. 优点
    • 使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
    • 对比苹果自带的Core Data框架,更加轻量级和灵活
    • 提供了多线程安全的数据库操作方法,有效地防止数据混乱
  3. FMDB的github地址: https://github.com/ccgus/fmdb
  4. 核心类
    FMDB有三个主要的类
    (1)FMDatabase
    一个FMDatabase对象就代表一个单独的SQLite数据库
    用来执行SQL语句
    (2)FMResultSet
    使用FMDatabase执行查询后的结果集
    (3)FMDatabaseQueue
    用于在多线程中执行多个查询或更新,它是线程安全的

数据解析

JSONKit

  1. JSONKit是用 Objective-C 实现的一个高性能的 JSON 解析和生成库。json正在逐步取代xml,成为网络数据的通用格式。
  2. 讲解:http://www.cnblogs.com/jiangyuxuan/archive/2013/03/09/2950984.html
  3. 下载地址:https://github.com/johnezang/JSONKit/

MJExtension

  1. MJExtension是JSON和Model(字典和模型)之间互相转换的超轻量级框架.
  2. MJExtension能完成的功能
    字典(JSON) –> 模型(Model)
    模型(Model) –> 字典(JSON)
    字典数组(JSON Array) –> 模型数组(Model Array)
    模型数组(Model Array) –> 字典数组(JSON Array)
  3. 讲解:http://www.jianshu.com/p/93c242452b
  4. GitHub链接:https://github.com/CoderMJLee/MJExtension

YYModel(最好用)

见博客内文章分析。

Mantle

图片加载缓存

SDWebImage

SDWebImage用于异步下载网络上的图片,并支持对图片的缓存等。
多数情况下是使用UIImageView+WebCache为UIImageView异步加载图片:

1.⼊⼝ setImageWithURL:placeholderImage:options:
会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始 处理图⽚。

2.进⼊SDWebImageManagerdownloadWithURL:delegate:options:userInfo:,
 交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.
 3.先从内存图⽚片缓存查找是否有图片,
 如果内存中已经有图⽚缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。
 4.SDWebImageManagerDelegate 回调
webImageManager:didFinishWithImage:

到 UIImageView+WebCache 等前端展示图⽚片。

5.如果内存缓存中没有,⽣成 NSInvocationOperation 
 添加到队列开始从硬盘查找图片是否已经缓存。

6.根据 URLKey 在硬盘缓存⽬目录下尝试读取图⽚片⽂文件。
这⼀一步是在 NSOperation 进⾏行行的操作,所以回主线程进⾏行行结果回调 notifyDelegate:。
7.如果上⼀操作从硬盘读取到了了图⽚,将图片添加到内存缓存中 
 (如果空闲内存过⼩小,会先清空内存缓存)。
SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。
 进⽽回调展示图⽚。

8.如果从硬盘缓存⽬目录读取不不到图⽚片,
 说明所有缓存都不不存在该图⽚片,需要下载图⽚片,

回调 imageCache:didNotFindImageForKey:userInfo:。
 9.共享或重新⽣生成⼀一个下载器器 SDWebImageDownloader 开始下载图⽚片。
 10.图⽚片下载由 NSURLConnection 来做,

实现相关 delegate 来判断图⽚片下载中、下载完成和下载失败。
 11.connection:didReceiveData: 中

利利⽤用 ImageIO 做了了按图⽚片下载进度加载效果。
 12.connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图⽚片解码处理理。

13.图⽚片解码处理理在⼀一个 NSOperationQueue 完成,

不不会拖慢主线程 UI。如果有需要对下载的图⽚片进⾏行行⼆二次处理理,
 最好也在这⾥里里完成,效率会好很多。

14.在主线程 notifyDelegateOnMainThreadWithInfo: 

宣告解码完成,
 imageDecoder:didFinishDecodingImage:userInfo:

回调给 SDWebImageDownloader。
 15.imageDownloader:didFinishWithImage:

回调给 SDWebImageManager 告知图⽚片下载完成。
 16.通知所有的 downloadDelegates 下载完成,
 回调给需要的地⽅方展示图⽚片。

17.将图⽚片保存到 SDImageCache 中,
 内存缓存和硬盘缓存同时保存。
 写⽂文件到硬盘也在以单独 NSInvocationOperation 完成,
 避免拖慢主线程。

18.SDImageCache 在初始化的时候会注册⼀一些消息通知,
 在内存警告或退到后台的时候清理理内存图⽚片缓存,
 应⽤用结束的时候清理理过期图⽚片。

19.SDWI 也提供了了 UIButton+WebCache 和 
 MKAnnotationView+WebCache,⽅方便便使⽤用。
 20.SDWebImagePrefetcher 可以预先下载图⽚片,
 ⽅方便便后续使⽤用。
 




网络布局

AFNetworking

libextobjc

libextobjc是一个Cocoa的库来扩展oc编程语言,来支持额外的模式在其他编程语言中的(包括这些不是面向对象的)。Github地址:https://github.com/jspahrsummers/libextobjc
特性:

  • 安全类:使用EXTSafeCategory,为一个没有重写任何的类添加方法。
  • 具体的协议:使用EXTConcreteProtocol,在一个协议中提供默认的方法的实现。
  • 更简单更安全的键路径:使用EXTKeyPathCoding,会自动检查在编译期的健路径。
  • 编译时检查选择器:使用EXTSelectorChecking.,为确保一个对象声明一个给定的selector.
  • 在模块中更容易使用弱变量:使用@weakify,@unsafeify和@strongify从EXTScope模块。
  • 基本范围的资源清理:使用@onExit在 EXTScope模块,为了自动清理手动分配的内存,文件处理,锁等等,在这个范围的结尾。
  • 代数数据类型的生成完全在一个编译时,使用EXTADT定义。
  • 对于分类的synthesized属性。使用EXTSynthesize。
  • 基于block的协同程序,使用EXTCoroutine。
  • EXTNil,就像NSNull,但是行为更接近于nil.(当发送未确认消息时不会崩溃)
  • 很多extension,和额外的功能建立在<objc/runtime.h>上面,包括极其定制方法注入,在对象属性的反射,以及各种功能来扩展类层次的检查和方法查找。

要执行 libextobjc的测试, 第一次运行 git submodule update –init –recursive
来引入 xcconfigs子模块, 然后打开工程文件然后选择所需的测试目标。

加入你的工程:

如果你想作为依赖吧libextobjc添加到一个application中,添加这个仓库作为一个子模块,然后加入你相关的源文件到xcode项目中。
如果你想作为依赖吧libextobjc添加到一个framework或者一个library中,更好的是子树合并,允许你重新命名符号来避免冲突,根据你的需要为你的库做任何调整。
创建libextobjc的子树:

1
2
3
4
$ git remote add libextobjc https://github.com/jspahrsummers/libextobjc.git
$ git fetch libextobjc
$ git read-tree --prefix=External/ -u libextobjc/master
$ git reset

重命名任何你想要的符号或改变,git add这特殊的文件你想要在你的库中。然后把他们添加到你的Xcode工程中。
接下来来引入upstream的改变:

1
2
3
$ git fetch -p libextobjc
$ git merge -Xsubtree=External/ libextobjc/master
$ git reset

要求

必须在ARC下建立,很多宏在调用的文件需要ARC,不支持MRR的使用。

有三个文件夹:

Modules

  1. EXTADT
  2. EXTConcreteProtocol
    3.EXTCoroutine
    4.EXTKeyPathCoding
    5.EXTNil
    6.EXTRuntimeExtensions
    7.EXTSafeCategory
    8.EXTScrope
    9.EXTSelectorChecking
    10.EXTSynthesize

Extensions

1.NSInvocation+EXT

2.NSMethodSignture + EXT

Other Sources

  1. extobjc_Prefix.pch
    2.extobjc.h
    3.metamacros.h

功能性库:

崩溃及数据分析:Crashlytics、Fabric、UMengAnalytics-NO-IDFA,

推送:JPush-iOS-SDK,

热修复:JSPatch,

二维码处理:libqrencode、QRCodeGenerator,

音频识别:iflyMSC,

加密:CocoaSecurity、NSHash,

zip: ZipArchive,

正向表达式支持:RegexKitLite,

React-Native:React,

汉字转拼音:PinYin4Objc

在线客服Meiqia

https://github.com/Meiqia/MeiqiaSDK-iOS

组件上的标记JSBadgeView

更多请参考

Github-iOS备忘
GitHub Top 100 简介
github资料

文章目录
  1. 1. 页面布局
    1. 1.1. Masonry(重点)
      1. 1.1.1. 概念
      2. 1.1.2. 框架下载地址:
      3. 1.1.3. Masonry介绍与使用实践(快速上手Autolayout)
      4. 1.1.4. 案例讲解:
      5. 1.1.5. 使用方法:
      6. 1.1.6. 常用方法:
    2. 1.2. MJRefresh
      1. 1.2.1. 概念
      2. 1.2.2. 代码地址
    3. 1.3. SVPullToRefresh
      1. 1.3.1. 概念
      2. 1.3.2. 代码地址
    4. 1.4. MBProgressHUD
    5. 1.5. 侧滑的菜单
      1. 1.5.1. RESideMenu
    6. 1.6. 手势解锁
    7. 1.7. 折线图
  2. 2. 数据存储
    1. 2.1. FMDB
  3. 3. 数据解析
    1. 3.1. JSONKit
    2. 3.2. MJExtension
    3. 3.3. YYModel(最好用)
    4. 3.4. Mantle
  4. 4. 图片加载缓存
    1. 4.1. SDWebImage
  5. 5. 网络布局
    1. 5.1. AFNetworking
  6. 6. libextobjc
    1. 6.0.1. 加入你的工程:
    2. 6.0.2. 要求
  7. 6.1. Modules
  8. 6.2. Extensions
  9. 6.3. Other Sources
  • 7. 功能性库:
    1. 7.1. 崩溃及数据分析:Crashlytics、Fabric、UMengAnalytics-NO-IDFA,
    2. 7.2. 推送:JPush-iOS-SDK,
    3. 7.3. 热修复:JSPatch,
    4. 7.4. 二维码处理:libqrencode、QRCodeGenerator,
    5. 7.5. 音频识别:iflyMSC,
    6. 7.6. 加密:CocoaSecurity、NSHash,
    7. 7.7. zip: ZipArchive,
    8. 7.8. 正向表达式支持:RegexKitLite,
    9. 7.9. React-Native:React,
    10. 7.10. 汉字转拼音:PinYin4Objc
    11. 7.11. 在线客服Meiqia
    12. 7.12. 组件上的标记JSBadgeView
  • 8. 更多请参考
  • 本站总访问量 本站访客数人次 ,