Block的三種應用場景

block開發(fā)中使用場景
1.把block保存到對象中,恰當?shù)臅r候才去調(diào)用
2.把block當做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部調(diào)用
3.把block當做方法的返回值,目的是為了代替方法.(封裝內(nèi)部的實現(xiàn),把block當做一個方法的返回值)

1.把block保存到對象中,恰當?shù)臅r候才去調(diào)用

/// block簡單的定義
- (void)block{
    // block 的定義,聲明
    void(^block)() = ^() {
        // 保存什么樣的代碼
        NSLog(@"執(zhí)行block");
    };
    
    // block的作用:幫你保存一份代碼,等你恰當?shù)臅r候才去調(diào)用
    
    
    // 調(diào)用block
    block();

}

#Person.h類
@interface Person : NSObject

// block類型:void(^)()
// block:作為屬性的時候其修飾符一定是copy
#對上面的解釋,詳細的內(nèi)存管理,以及處理見大神的博客:http://www.itdecent.cn/p/ac86dc80cca5
@property (nonatomic,strong)void(^operation)();

// 參數(shù)類型:block類型
- (void)eat:(void(^)())block;

// 返回類型:block類型
- (void(^)(NSInteger))run;
//- (void)run:(NSInteger)meter;

@end

#Person.m
#import "Person.h"

@implementation Person

- (void)eat:(void (^)())block{
    block();
}



- (void (^)(NSInteger))run{
    return ^(NSInteger meter){
        NSLog(@"跑了%ld米",meter);
    };
}
@end

#1.把block保存到對象中,恰當?shù)臅r候才去調(diào)用
/// 保存到對象中
- (void)block1{
    
    // 第一種方式直接給一個block塊
    //    _p.operation = ^(){
    //        NSLog(@"執(zhí)行Person中的block");
    //    };
    
    // 第二種:采用賦值思想
    void(^block)() = ^() {
        NSLog(@"執(zhí)行Person中的block");
    };
    _p.operation = block;
}

/// 點擊屏幕時調(diào)用block
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    _p.operation();
}

2.把block當做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部調(diào)用

/// 把block當做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部調(diào)用
- (void)block2{
    [_p eat:^{
        NSLog(@"執(zhí)行Person中的吃的方法");
    }];
}

3.把block當做方法的返回值,目的是為了代替方法.(封裝內(nèi)部的實現(xiàn),把block當做一個方法的返回值)

#import "ViewController.h"

#import "Person.h"

@interface ViewController (){
    Person *_p;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    /**
     block開發(fā)中使用場景
     1.把block保存到對象中,恰當?shù)臅r候才去調(diào)用
     2.把block當做方法的參數(shù)使用,外界不調(diào)用,都是方法內(nèi)部調(diào)用
     3.把block當做方法的返回值,目的是為了代替方法.(封裝內(nèi)部的實現(xiàn),把block當做一個方法的返回值)
     */
    _p = [[Person alloc] init];
    
//    [_p run:2]; 平常調(diào)用方法
    _p.run(2); // 利用block當做方法的返回值
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 《Objective-C高級編程》這本書就講了三個東西:自動引用計數(shù)、block、GCD,偏向于從原理上對這些內(nèi)容...
    WeiHing閱讀 10,089評論 10 69
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,926評論 25 709
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,603評論 30 472
  • 喵喵是我養(yǎng)的第二只貓,小學5年級我養(yǎng)了第一只貓叫諾諾,承諾的諾是我和好朋友一起取得名字。養(yǎng)了兩年多不過后來搬家了,...
    76530捂臉閱讀 330評論 0 2

友情鏈接更多精彩內(nèi)容