码迷,mamicode.com
首页 > 其他好文 > 详细

block

时间:2015-07-09 08:28:55      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

  • 基本概念

    • 作用:用来保存一段代码块
    • 标志符:^
    • 可以有返回值
    • 可以有形参
    • 调用方式类似函数的调用
  • block的定义

    • 无返回值、无形参的block的定义

      // 定义block变量
      void (^myBlock) () = ^()// 无形参这里的括号可以省略,简写如下
      {
        // 代码逻辑
      };
      
      // 简写形式
      void (^myBlock) () = ^
      {
        // 代码逻辑
      };
      
      // block变量的调用
      myBlock();
    • 有返回值、有形参的block定义

      // 定义block变量
      int (^sumBlock) (int,int) = ^int (int a,int b)// 这里的返回值类型可以省略
      {
        return a+b;
      };
      
      // 简写形式
      int (^sumBlock) (int,int) = ^(int a,int b)
      {
        return a+b;
      };
      
      // block变量的调用
      int num = sumBlock(1,3);
  • block访问及修改外部变量

    • block可以直接访问外部变量

      int a = 2;
      // 定义block变量
      void (^myBlock);
      myBlock = ^
      {
        NSLog(@"a = %d",a);
      };
      
      // block变量的调用
      myBlock();
    • block代码块内可以直接修改全局变量
    • block修改不是代码块内部的局部变量必须在变量前加上__block关键字

      __block int a = 2;
      // 定义block变量
      void (^myBlock);
      myBlock = ^
      {
        a = 3;
      };
      
      // block变量的调用
      myBlock();
  • typedef定义block类型
typedef int (^MyBlock)(int,int);

// 以后就可以利用MyBlock变量类型来定义block变量了
MyBlock sumBlock = ^int (int a,int b)// 返回值类型可以省略,简写如下
{
    return a+b;
};

// 简写如下
MyBlock sumBlock = ^(int a,int b)
{
    return a+b;
};

// 调用block
int num = sumBlock(1,2);
  • block作为方法参数示例
+ (void)animateWithDuration:(NSTimeInterval)duration
                      delay:(NSTimeInterval)delay
     usingSpringWithDamping:(CGFloat)dampingRatio
      initialSpringVelocity:(CGFloat)velocity
                    options:(UIViewAnimationOptions)options
                 animations:(void (^)(void))animations          // 无形参
                 completion:(void (^)(BOOL finished))completion;// 有形参无返回值

// 有返回值有形参
- (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate;

block

标签:

原文地址:http://www.cnblogs.com/xuebao/p/4631873.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!