iOS DeveloperiOS 开发成长中心iOS 你不知道的新鲜事

iOS开发--Block使用有坑

2016-11-16  本文已影响1373人  爱吃鱼的小灰

首先来了解下什么是Block

  void(^demoBlock)() =^ {
   NSLog(@"Block");
// 无参数,无返回值
};
int(^sumBlock)(int, int) =^(int x, int y) {
   return x +y;
// 有参数有返回值
};
int i = 10;
void (^myBlock) () = ^{
NSLog(@"%d",i);
} 
i = 100;
myBlock();
__block int i = 10;
void (^myBlock) () = ^{
NSLog(@"%d",i);
} 
i = 100;
myBlock();

Block的使用要点

1、Block可以被当做参数直接传递​,在被当做参数传递时,Block同样可以使用在定义之前声明的局部变量

typedef double(^MyBlock)(double, double);
// 下边直接用定义的名字写起来简短许多
MyBlock area = ^(double x, double y) {
    return x * y;
};
MyBlock sum = ^(double a, double b) {
    return a + b;
};​

(1)typedef是关键字用于定义类型,MyBlock是定义的Block类型
(2)area、sum分别是MyBlock类型的两个Block变量尽管,typedef可以简化Block的定义,但在实际开发中并不会频繁使用typedef关键字
这是因为Block具有非常强的灵活性,尤其在以参数传递时,使用Block的目的就是为了立即使用

@property (nonatomic,strong)NSMutableArray * myBlocks;
#pragma mark 
int (^sum)(int ,int) = ^(int x,int y){
return [self sum:x y:y];
};
[self.myBlocks addObject:sum];
代码导图.jpg
上一篇 下一篇

猜你喜欢

热点阅读