黑马程序员技术交流社区
标题:
block什么时候用?怎么用?
[打印本页]
作者:
yaozeyang_2014
时间:
2014-3-26 10:49
标题:
block什么时候用?怎么用?
本帖最后由 yaozeyang_2014 于 2014-3-26 23:10 编辑
block该在什么场合下用,用了有什么不一样的效果
作者:
agelessman
时间:
2014-3-26 12:04
block的几种适用场合:
任务完成时回调
处理消息监听回调处理
错误回调处理
枚举回调
视图动画、变换
排序
作者:
Max_骏
时间:
2014-3-26 15:35
Block的使用:(1)Block用于回调:
例:typedef void(^CallBackBlock)(int value);
////////////////////////////
@interface MainClass : NSObject
- (void)doSomething;
@end
@implementation MainClass
- (void)doSomething
{
AssitClass *assitClass = [[AssitClass alloc] init];
[assitClass assitSomethingCompletion:^(int value)
{
NSLog(@"%d",value);
//根据参数
}];
}
@end
////////////////////////////
@interface AssitClass : NSObject
- (void)assitSomethingCompletion:(CallBackBlock)completionBlock;
@end
@implementation AssitClass
- (void)assitSomethingCompletion:(CallBackBlock)completionBlock
{
//doSomething
int value = 0;//根据具体的逻辑赋值
completionBlock(value);
//如果Block有返回值这里获取,然后做一些其他操作。
}
@end
(2)Block用于并发;
例:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
//doSomething
});
dispatch_async(dispatch_get_main_queue(), ^{
//更新UI
});
(3)Block用于遍历。
例:__block BOOL found = NO;
NSSet *stringSet = [NSSet setWithObjects: @"Alpha", @"Beta", @"Gamma", @"X", nil];
NSString *string = @"gamma";
[stringSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop)
{
if ([obj localizedCaseInsensitiveCompare:string] == NSOrderedSame)
{
*stop = YES;//调用Block那边怎么根据stop的值停止遍历?
found = YES;
}
}];
Block的实现
请参考:http://blog.csdn.net/joywii/article/details/15340523
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2