block

8 篇文章 0 订阅
block快捷方式: inlineBlock
returnType(^blockName)(parameterTypes) = ^(parameters) {
        statements
    };


name: 类型的别名
typedef void (^BlockName)();
block别名快捷方式: typedefBlock
typedef returnType(^name)(arguments);



Person.h
block:ARC 使用 strong, ARC 使用 copy
block 类型 :void(^)()
@property ( nonatomic , strong ) void (^operation)();

// 参数类型 :block 类型
- (
void )eat:( void (^)())block;

- (
void )run:( int )metre;

// 返回值 类型 :block 类型
- (void(^)(int))run;


Person.m
- ( void )run:( int )metre
{
    NSLog(
@"%d" ,metre);
}

- (
void (^)( int ))run
{
   
return ^( int meter){
     
        NSLog(
@" 跑了 %d " ,meter);
    };
}







block开发中使用场景


ViewController.h


1.把block保存到对象中,恰当时机的时候才去调用
- ( void )block
{  // block 声明 , 定义
   void(^block)() = ^() {
        // 保存什么样的代码
       
        NSLog(
@" 执行 block" );
   };
 // block 作用 : 帮你保存一份代码 , 等到恰当时机的时候才去调用
 // 调用 block
    block();
}


- ( void )block1
{
   
Person *p = [[ Person alloc] init];
   
    第一种赋值  
   void(^block)() = ^() {
        NSLog( @" 执行对象中 block" );
    };
    p. operation = block;
   
    第二种赋值  
   p.operation = ^(){
       
        NSLog(
@" 执行对象中 block" );
    };
   
 
    _p = p;

}


2.把block当做方法的参数使用,外界不调用,都是方法内部去调用,Block实现交给外界决定
- ( void )block2
{    Person *p = [[Person alloc] init];
   
     第一种赋值
    void (^block)() = ^{
        NSLog(
@" 吃东西 " );
    };
   
    [p
eat :block];
   
     第一种赋值  
       传入 block 给参数的 Block 赋值
    [p eat :^{
        NSLog(
@" 吃东西 " );
    }];
}



3.block当做方法的返回值,目的就是为了代替方法.block交给内部实现,外界不需要知道Block怎么实现,只管调用(封装内部的实现,把block当做方法返回值)
- ( void )block3
{
   
Person *p = [[ Person alloc] init];
   
   
// 一般 OC 实现方法
    [p
run :2];
   
   
   
//block 的实现方法
    // 第一种调用 ( 只有返回值是 block 才可这样调用)
      . 是使用get方法,必须有返回值
    p. run (2);
   
   
// 第二种调用
   
void (^run)( int ) = p. run ;
    run(2);
   
 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值