1. AFNetworking/AFNetworking
作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一。
AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现在许多人都用它取代 ASIHTTPRequest。
AFNetworking中最常用的就是POST和GET请求,除此,它还可以配置HTTPHeader。
GET请求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];
POST请求
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }];
2. rs/SDWebImage
作者 Olivier Poitrey 是 Dailymotion 的 CTO, 拥有多个不错的开源项目。此项目常用于对从 Web 端接受到的图片进行缓存, 是 UIImageView 的扩展, 应用起来比较简单。
框架中最最常用的方法其实就是这个:
[self.imageView sd_setImageWithURL:[NSURL URLWithString:@"url"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
这个框架中还有 UIButton 的分类, 可以给 UIButton 异步加载图片。
3. ReactiveCocoa
由 GitHub 工程师们开发的一个应用于 iOS 和 OS X 开发的函数响应式编程新框架。它被Mattt Thompson大神称为开启一个新Objective-C纪元。ReactiveCocoa提供了API用来组合、转换一直变化的数据流。
该框架常用于对事件的监听,实时监听 textField 输入的字符串并打印,方法如下:
[[textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(id x) { LxDBAnyVar(x); }];
为 UIView 添加点击事件
self.view.userInteractionEnabled = YES; UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]init]; [[tap rac_gestureSignal] subscribeNext:^(UITapGestureRecognizer * tap) { LxDBAnyVar(tap); }]; [self.view addGestureRecognizer:tap];
监听 app 进入后台的通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(NSNotification * notification) { LxDBAnyVar(notification); }];
4. BradLarson/GPUImage
一款强大的图片滤镜工具, 支持自定义滤镜, 可用来实时处理图片和视频流, 作者是 SonoPlot 公司的 CTO, 在很小的时候便开始接触编程。GPUImage 这个项目从 2012 年开始, 使用 OpenGL 图形程序接口编写, 性能非常好, 现在很多 iOS 程序员都用它来实现 iOS 的模糊效果。该项目的优点不但在于滤镜很多,而且处理效果是基于GPU的,比使用CPU性能更高。
5. SnapKit/Masonry
一个轻量级的布局框架, 同时支持 iOS 和 Mac OS X, 语法优雅, 帮助开发者快速适配不同分辨率的 iOS 设备。
常用方法:
//给视图添加新的约束 - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; //给视图更新约束 - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; //删除原有所有约束,添加新的约束 - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
6. jdg/MBProgressHUD
作者 Matej Bukovinski 是一位全栈工程师, UI/UX 设计师。是一个显示HUD窗口的第三方类库,用于在执行一些后台任务时,在程序中显示一个表示进度的loading视图和两个可选的文本提示的HUD窗口。
默认使用的系统自带指示器
hud.mode = MBProgressHUDModeIndeterminate;
饼图 hud.mode = MBProgressHUDModeDeterminate; 进度条 hud.mode = MBProgressHUDModeDeterminateHorizontalBar; 圆环 hud.mode = MBProgressHUDModeAnnularDeterminate;
7. ccgus/fmdb
一个对 SQLite 进行封装的库, 使用起来方便, 简单。
三个重要的类
FMDatabase 表示一个独立的SQLite数据库,可以用于执行SQL 命令语句
FMResultSet 一组查询结果
FMDatabaseQueue 多线程服务,如果想在不同的线程中执行查询和更新的操作会用到,它是线程安全的
8. RestKit/RestKit
主要用于 iOS 上网络通信, 允许与 RESTful Web 服务交互, 常用于处理 API, 解析 JSON, 映射响应对象等操作, 简单易用, 方便你把所有精力都放在对数据的操作上。
9. Mantle/Mantle
作者是 GitHub 的员工, 文档写的很清楚: Mantle makes it easy to write a simple model layer for your Cocoa or Cocoa Touch application。它是用于Cocoa和Cocoa Touch模型转换的开源库。Mantle可以很轻松地完成JSON接口的模型转换工作。
常用到的就是MTLJSONAdapter和MTLModle。
MTLJSONAdapter则是帮我们把JSON数据绑定到Model的属性里,当然,你不用担心会出现NSNull的情况,因为转换后它会自动设置成nil。
MTLModel是一个抽象类,它帮我们做了很多工作,比如解决前言里提出的一些问题。 我们要建的Model类应该继承于它,此外你的继承类一定还要实现MTLJSONSerializing协议。
10. magicalpanda/MagicalRecord
作者是 Coursera 的 iOS 工程师, 该项目创作灵感来自于 Ruby on Rails 的 Active Record, 主要为方便操作 CoreData 而生, 帮助清除 CoreData 引用的代码, 协助方便 CoreData 的工作,使得你可以非常容易的添加、查找、删除数据。、
// 查询记录 - (void)findData { // 查找数据库中的所有数据 NSArray *person = [Person MR_findAll];
<span style="font-size:12px;">// 删除记录 - (void)deleteData { NSArray *personArr = [Person MR_findByAttribute:@"age" withValue: [NSNumber numberWithInt:25]]; for (Person *person in personArr) { [person MR_deleteEntity]; } [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];</span>