Block - 3

来源:互联网 发布:tp路由器mac地址修改器 编辑:程序博客网 时间:2024/05/21 10:35

Block的几种典型的使用:

1.某些系统框架(System Framework)类的方法中,参数类型为block,下面几种例子,数组,动画等

    NSDictionary* dic = [NSDictionary dictionary];    dic = @{@"key1":@"values1",  @"key2":@"values2", @"key3":@"values3"};        /** inline Block **/    [dic enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL* stop){            NSLog(@"@value for key : %@ is %@", key, value);        }];

    [UIView animateWithDuration:0.5f animations:^{                //动画效果        _flowButton.frame = CGRectMake(0, 0, _flowButton.bounds.size.width,                                             _flowButton.bounds.size.height);            } completion:^(BOOL finished){                //结束瞬间用block来完成一些开发者想要做的事情        _isFlowButtonDismiss = YES;    }];



2.系统的很多方法从delegate 或 callback 模式 转变成回调block作为函数参数

例如Mac下NSPanel的一些方法,还有上面提到的UIView的动画是从beginAnimations函数:

+ (void)beginAnimations:(nullable NSString *)animationID context:(nullable void *)context;  // additional context info passed to will start/did stop selectors. begin/commit can be nested

向block演变的等例子。


3.一些通知处理:

    [[NSNotificationCenter defaultCenter] addObserverForName:@"TestNotification"                                                      object:nil queue:aNSOperationQueue                                                  usingBlock:^(NSNotification* notification){                                                                                                        NSLog(@"Notification: %@", notification);                                                                                                    }];


4.GCD,这个太多了!

    dispatch_async(dispatch_get_main_queue(), ^{            });


参考:

Reference : http://blog.csdn.net/smking/article/details/8424902


0 0
原创粉丝点击