- (void)bk_each:(void (^)(id obj))block; 数组遍历 obj是数组内的每一个元素。
- (id)bk_match:(BOOL (^)(id obj))block;
返回数组元素,一找到就跳出循环
- (NSArray *)bk_select:(BOOL (^)(id obj))block;
继续用上面的代码,用select之后,MM和GG都会输出出来,返回的是数组
- (NSArray *)bk_reject:(BOOL (^)(id obj))block;
继续用上面的代码,用reject 返回了1,2,3,4。好嘛,基本就是上面的return之前取反
- (NSArray *)bk_map:(id (^)(id obj))block;
每一个元素都会调用一次block,最后返回重新生成的数组,该数组长度与原数组相同,元素由block内返回的值确定,block返回为空则默认成null
返回:
- (id)bk_reduce:(id)initial withBlock:(id (^)(id sum, id obj))block;
这个方法调用的次数等于数组的长度,每次调用完返回的值会存到sum中,并且这个sum最终会赋值给这个函数的返回值,就是说,这就像个递归,在block中可以对数组当前的元素(obj)和sum进行操作,block的最后return的东西就是下一个sum,并且最终函数返回了sum。至于这个initial是什么,这就是sum的初始值。方法用来干什么,有人用来把数组拼接成字符串,当然也可以获取数组中元素的最值什么的,比如,获取某个班C语言成绩最高的同学的信息。别人拼接字符串的代码
- (NSInteger)bk_reduceInteger:(NSInteger)initial withBlock:(NSInteger(^)(NSInteger result, id obj))block;
判断数组中某元素个数?C语言及格的人数?
- (CGFloat)bk_reduceFloat:(CGFloat)inital withBlock:(CGFloat(^)(CGFloat result, id obj))block;
C语言总分?之后算平均分?原谅我理解不够透彻。。。
- (BOOL)bk_any:(BOOL (^)(id obj))block;- (BOOL)bk_none:(BOOL (^)(id obj))block;
去看.m方法就可以了
- (BOOL)bk_all:(BOOL (^)(id obj))block;
官方解释:Loops through an array to find whether all objects match the block,遍历数组看是否所有元素匹配block中的条件
- (BOOL)bk_corresponds:(NSArray *)list withBlock:(BOOL (^)(id obj1, id obj2))block;
对两个数组进行操作,obj1是当前数组中对应位置的元素,obj2是list数组中对应位置的元素,虽然返回值是bool型,但是可以在block里面做些其他的操作,比如引入第三者,把obj1和obj2操作的结果add进一个NSMutableArray里面去。
因为NSDictionary+BlokcsKit 类似,不再话下。
2.NSObject+BK.....
- (void)bk_associateValue:(id)value withKey:(const void *)key;
经常跟 runtime 打交道的人不可能不知道 AssociatedObject ,当我们想要为一个已经存在的类添加属性时,就需要用到 AssociatedObject 为类添加属性,而 BlocksKit 提供了更简单的方法来实现,不需要新建一个分类。
NSObject *test = [[NSObject alloc] init];
[test bk_associateValue:@
"Draveness"
withKey:@
" name"
];
NSLog(@
"%@"
,[test bk_associatedValueForKey:@
"name"
]);
- (void)bk_removeAllAssociatedObjects;
顾名思义,移除添加的临时属性
NSOBject+
BKBlockExecution 这个类提供的一些接口,可以在任意对象上快速执行线程安全、异步的 block,而且这些 block 也可以在执行之前取消。
- (id)bk_performBlock:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay;
主线程执行block方法 delay:延迟时间
- (id)bk_performBlockInBackground:(void (^)(id obj))block afterDelay:(NSTimeInterval)delay;
后台执行block
+ (void)bk_cancelBlock:(id )block
取消block,至于怎么实现的,自行百度。
3.NSTimer+BlocksKit
+ (NSTimer *)bk_scheduledTimerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats;
新增定时器并且自动添加到当前的runLoop,inTimeInterval:间隔时间 inRepeats:是否重复,block中执行定时器要准备好的事件,例如一个倒计时,记得在适当的时候移除定时器
+ (NSTimer *)bk_timerWithTimeInterval:(NSTimeInterval)inTimeInterval block:(void (^)(NSTimer *timer))inBlock repeats:(BOOL)inRepeats;
需要手动将timer加进runLoop