BlocksKit工具包的使用
一、为什么要使用BlocksKit
BlocksKit是一个block的大杂烩,它给Fundation和UIKit框架里很多的类都做了扩展,可以通过调用相关类的扩展的方法简单的实现一下几个功能:
1.通过block传入事件处理函数
2.创建动态代理,传入block给想要实现的方法。
3.在很多基础的类上增加额外的方法
block可以帮助我们组织独立的代码段,并提高复用性和可读性。而BlocksKit可以很简单的实现block,实现回调,和通信,可以大大减少工作量。
二、如何下载和使用
1. 下载:在浏览器输入 https://github.com/zwaldowski/BlocksKit这个连接,进入下面这个页面:
2.点击上图右下角下载最新的master版本的BlocksKit包。
3.下载下来的文件结构如下图:
下载下来的是一个静态库工程文件。官方文档中描述需要自己编译成静态库文件,才能添加到自己的工程中。不过我这里,按照文档指示操作,编译成功了,并没有找到提到的头文件夹,所以我就没有通过添加静态库的方式使用这个框架。我是把BlocksKit那个文件夹里除了BlocksKit-Info.plist外的所有文件添加到工程的新建的BlocksKit文件夹中,然后对里面的.h文件稍作修改,就可以直接使用了。
4.修改.h文件
比如BlocksKit.h文件里的内容如下:
#import <BlocksKit/NSArray+BlocksKit.h>
#import <BlocksKit/NSDictionary+BlocksKit.h>
#import <BlocksKit/NSIndexSet+BlocksKit.h>
#import <BlocksKit/NSInvocation+BlocksKit.h>
#import <BlocksKit/NSMutableArray+BlocksKit.h>
#import <BlocksKit/NSMutableDictionary+BlocksKit.h>
#import <BlocksKit/NSMutableIndexSet+BlocksKit.h>
#import <BlocksKit/NSMutableOrderedSet+BlocksKit.h>
#import <BlocksKit/NSMutableSet+BlocksKit.h>
#import <BlocksKit/NSObject+BKAssociatedObjects.h>
#import <BlocksKit/NSObject+BKBlockExecution.h>
#import <BlocksKit/NSObject+BKBlockObservation.h>
#import <BlocksKit/NSOrderedSet+BlocksKit.h>
#import <BlocksKit/NSSet+BlocksKit.h>
#import <BlocksKit/NSTimer+BlocksKit.h>
#import <BlocksKit/BKMacros.h>
这样直接使用,会报错,说头文件找不到,原因是不是导入静态库的方式使用,使用<>所以编译器会到系统的类库里去找,系统类库当然会找不到第三方的类库,所以只需要将上面导入头文件的方式改成,以下的内容:
#import "NSArray+BlocksKit.h"
#import "NSDictionary+BlocksKit.h"
#import "NSIndexSet+BlocksKit.h"
#import "NSInvocation+BlocksKit.h"
#import "NSMutableArray+BlocksKit.h"
#import "NSMutableDictionary+BlocksKit.h"
#import "NSMutableIndexSet+BlocksKit.h"
#import "NSMutableOrderedSet+BlocksKit.h"
#import "NSMutableSet+BlocksKit.h"
#import "NSObject+BKAssociatedObjects.h"
#import "NSObject+BKBlockExecution.h"
#import "NSObject+BKBlockObservation.h"
#import "NSOrderedSet+BlocksKit.h"
#import "NSSet+BlocksKit.h"
#import "NSTimer+BlocksKit.h"
#import "BKMacros.h"
其他几个头文件也以相同的方式修改即可。
5.在工程中使用
做好上面的步骤之后,在代码中使用就更简单了,使用之前导入相应的头文件
Foundation框架:#import "BlocksKit.h"
UIKit框架:#import "BlocksKit+UIKit.h"
QuickLook框架:#import" BlocksKit+QuickLook.h"
MessageUI框架:#import " BlocksKit+MessageUI.h"
然后根据自己的需要调用相关类的扩展方法即可。
三、demo源码:利用BlocksKit快速遍历数组,并对数组中的每个元素进行想要的操作,BlocksKit使用起来很简单也很方便,除了demo里面演示的少量的用法,其实还有很多block的使用,比如只需要一句代码就可以给视图添加手势及手势点击事件等,在这里不一一列出,在BlocksKit的相应的头文件的公开方法都有很详细的注释;
#import "ViewController.h"
#import "BlocksKit.h"
#import "QLViewController.h"
#import "BlocksKit+UIKit.h"
@interface ViewController ()
{
NSArray*arr;
}
@end
@implementationViewController
- (void)viewDidLoad {
[super viewDidLoad];
//Do any additional setup after loading the view, typically from a nib.
NSMutableArray*array = [NSMutableArrayarray];
for (int i=0; i <10000; i++) {
[array addObject:[NSStringstringWithFormat:@"%d",i]];
}
arr =array;
UIButton*button = [UIButtonbuttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(40, 200, 100, 30);
button.backgroundColor =[UIColorblueColor];
//给button添加点击事件
[button bk_addEventHandler:^(id sender){
//拼接字符串
[self map];
} forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:button];
}
- (void)map
{
//对原来的数组对象操作,返回一个新的数组,
arr = [arrbk_map:^id(id obj) {
return [obj stringByAppendingString:@".png"];
}];
}
- (IBAction)asyncEnumAction:(id)sender {
//快速遍历,无序
[arr bk_apply:^(id obj) {
// NSLog(@"元素%d", [obj intValue]);
NSLog(@"%@", obj);
}];
}
- (IBAction)syncEnumAciton:(id)sender {
//有序遍历
[arr bk_each:^(id obj) {
// NSLog(@"元素%d", [obj intValue]);
NSLog(@"%@", obj);
}];
}
- (IBAction)presentQuickLookVC:(id)sender {
QLPreviewController *quickLookVC = [[QLPreviewControlleralloc]init];
[self presentViewController:quickLookVCanimated:NOcompletion:nil];
}
@end
运行结果:
拼接之前:
2014-12-15 15:52:59.416NSArray-BlocksKit[27290:177611] 9990
2014-12-15 15:52:59.434NSArray-BlocksKit[27290:177605] 9992
2014-12-15 15:52:59.434NSArray-BlocksKit[27290:177610] 9993
2014-12-15 15:52:59.434NSArray-BlocksKit[27290:177611] 9994
2014-12-15 15:52:59.434NSArray-BlocksKit[27290:177605] 9995
2014-12-15 15:52:59.434NSArray-BlocksKit[27290:177610] 9996
拼接之后:
2014-12-15 15:55:29.671NSArray-BlocksKit[27290:177350] 39.png
2014-12-15 15:55:29.671NSArray-BlocksKit[27290:177350] 40.png
2014-12-15 15:55:29.672NSArray-BlocksKit[27290:177350] 41.png
2014-12-15 15:55:29.672NSArray-BlocksKit[27290:177350] 42.png
2014-12-15 15:55:29.672NSArray-BlocksKit[27290:177350] 43.png
四、总结
BlocksKit使用简单方便,这几天除了研究它的使用之外,对其他的第三方框架也有了解,比如UMeng的应用数据分析,MBProgressHUD进度条的使用,以及如何使用QuickLook快速浏览应用中不同格式的文件等。越往下,感觉需要学习的东西越多。