iOS 关于block的简单使用

  首先,这里只是对于block的基本用法,至于更深入的了解,请期待下一回合。

  用block可以定义任意的代码片段,可以将其像对象一样传入另一个方法,是c级别的语法,和c中的函数指针很类似。

  c中的函数指针定义;

  返回值类型|函数名|参数

  如:

int(*fun)(int a,int b);

obj-c中的 block 定义;

返回值类型  方法名   参数

如:

int(^blockDemo)(intnum);

我们可以看到两者之间唯一的区别就是^和*了。

使用block 可以用于回调,动画,遍历等。

首先定义一个 block

typedef NSString *(^block)(NSInteger);

然后写一个 简单的方法,有3个参数,其中最后一个为 block,整个方法返回一个NSInteger类型的值

- (NSInteger)dealWithArray:(NSArray *)array andInteger:(NSInteger)integer andBlock:(block)block

{

   NSInteger sum = 0;

   for (NSString *objin array) {

        sum += [objintegerValue];

        sum += [block([objintegerValue]) integerValue];

    }

    sum += integer;

    return sum;

}

在调用的地方这样写。

NSArray *arr = @[@"1",@"2",@"3"];

NSInteger n = [selfdealWithArray:arrandInteger:5andBlock:^NSString *(NSInteger i) {

   return [NSStringstringWithFormat:@"%ld",(long)i * i];

}];

最后打印一下n的值。

 NSLog(@"n = %ld",(long)n);

2015-02-11 13:49:59.368 BlockDemo[1732:73874] n = 25

我们来分析一下

在实际调用开始写的那个方法的时候,将block调用了三次


每次又是使用的 数组的一个元素,将 传进去的值的平方转换为NSString类型后返回

sum 一次为 sum+1+1*1+2+2*2+3+3*3+5,sum初始值为0 所以最后会得到 n=25;

相信看了这个例子 也对将block作为方法的一个参数使用有了一定的了解。


上述仅为作者本人自己的了解,肯定有很多地方描述的有问题,请指出问题,相互提高,谢谢!

你可能感兴趣的:(ios)