OC学习 第十四章 Block代码块

OC学习    第十四章                         Block代码块

一、声明实现方式:
1.               int (^myfun)( int a);
        myfun = ^(
int a){
           
return a;
        };
       
int b = myfun( 10 );
        NSLog(@"%d",b);
2.
int (^myfun2)( int a, int b) =  ^( int a, int b){
           
return a+b;
        };
      
int c = myfun2( 1 , 2 );
        NSLog(@"%d",c);
3.
  NSString *(^myfun3)( NSString *s) = ^( NSString *s){
           
return s;
        };
        NSLog(@"%@",myfun3(@"123"));
二、值的改变:(调用时“()”不能少,即使无参数传递也不行)
1.局部变量(需加 __block
        __block int b = 0;

        void (^myBlock2)() = ^(){
            b++;
        };
2.全局变量(不需加 __block ):
      int c = 0;
void (^myBlock3)() = ^(){
            c++;
        };
3.block 作为函数的参数
函数返回值类型   函数名 (block 的声明格式 )
void fun( int (^bsasa)( int a, int b)){
   
int sum = bsasa( 3 , 2 );
   
NSLog ( @"%d" ,sum);
}

void fun1( NSString *(^myBlock)( NSString *s), NSString *s1){
   
NSLog ( @"---%@" ,myBlock(s1));
}

int main( int argc, const char * argv[]) {
   
@autoreleasepool {
       
       
// 当一个 block 作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
       
int (^myBlock) ( int c, int d) = ^( int a, int b){
           
NSLog ( @"--%d,%d" ,a,b);
           
return a-b;
        };
       
       
// 函数形参是 block ,调用时,直接传 block 的名字就行
       
fun (myBlock);
       
       
// 调用的另一种方式:内联
       
// 内联 block 格式: ^ 返回值类型 ( 形参列表 ){}
       
fun (^ int ( int a, int b) {
           
           
return a*b;
        });
       
       
fun1 (^ NSString *( NSString *s) {
           
return s;
        },
@"123" );
       
    }
   
return 0 ;
}
4.block作为方法的参数(注意代码走向)
声明:1.-( void )four:( void (^)( int a, int b))block;
     2. -( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1
实现:1. Arithmetic *ari = [[ Arithmetic alloc ] init ];
        [ari
four :^( int a, int b) {
           
NSLog ( @" 和为 %d" ,a + b);
        }];
     2. -( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1{
                    myblock1(name);
        }
 (对应2.)主函数: [p sengStr : @" 尚德 " andblock :^ NSString *( NSString *s) {
           
NSLog ( @" 我在: %@" ,s);
           
return s;
        }];(理解)
block 作为方法的参数:(返回值类型 (^)( 形参列表 ) )参数名 (blcok 名字 )
使用typedef 声明block typedef 返回值类型 (^ 名字)( 形参列表)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值