A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaozeyang_2014 中级黑马   /  2014-3-26 10:49  /  1098 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yaozeyang_2014 于 2014-3-26 23:10 编辑

block该在什么场合下用,用了有什么不一样的效果

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
block的几种适用场合:
任务完成时回调
处理消息监听回调处理
错误回调处理
枚举回调
视图动画、变换
排序

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马