IOS Block基础用例

Lara ·
更新时间:2024-09-20
· 546 次阅读

  Block这渣渣,对于刚写IOS的人,肯定都是有很多疑惑的,我们先来说明Block的语法及用例。   1.定义一个Block   int num1 = 2;   定义一个名为myBlock,返回值为int参数为空的 block int (^myBlock)(void) = ^(void) { return 10; }; myBlock(); int (^myBlock1)(int) = ^(int num){ return num * 10; }; myBlock1(num1); void (^myBlock2)(int,int) = ^(int num1,int num2){ NSLog(@"num1 is : %d  num2 is : %d ",num1,num2); }; myBlock2(num1,100);   2.把block当做参数   -(void) addPullToRefreshBlock:(void(^)(void))block {   _cardTableView.mj_header = [MyMJHeader headerWithRefreshingBlock:^{   block();   }];   }   3.把block当做返回值   - (void (^)(void)) method;   4.typedef block   typedef void (^BoolBlock)(BOOL);//一个只接受一个BOOL参数,没有返回值的block   typedef int (^IntBlock)(void);//一个没有参数,返回int的block   typedef BoolBlock (^HugeBlock)(IntBlock);//看看,这个HugeBlock的参数和返回值都是block   同样,利用typedef后的 block 类型,可以简化上面各种写法   例如:   block参数   -(void) addPullToRefreshBlock:RefreshBlock block{   //code   }   返回block   -(BoolBlock) method;   5.类的成员变量   利用上面的 typedef后的类型   @property (copy,nonatomic) BoolBlock myBlock;   6.全局block static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;}; int main() { printf("%d ", maxIntBlock(2,10)); return 0; }   7.__block   如果要在block内修改block外声明的栈变量,那么一定要对该变量加__block标记 int main() { __block int i = 1024; BoolBlock bBlock = ^(BOOL bV) { if (bV) { i++;//如果没有__block标记,是无法通过编译的。 } }; }



IOS block

需要 登录 后方可回复, 如果你还没有账号请 注册新账号