zoukankan      html  css  js  c++  java
  • block作为函数参数回调

    Blocks make this much easier, however, because you can define the callback behavior at the time you initiate the task, like this:

    - (IBAction)fetchRemoteInformation:(id)sender {
        [self showProgressIndicator];
     
        XYZWebTask *task = ...
     
        [task beginTaskWithCallbackBlock:^{
            [self hideProgressIndicator];
        }];
    }
    This example calls a method to display the progress indicator, then creates the task and tells it to start. The callback block specifies the code to be executed once the task completes; in this case, it simply calls a method to hide the progress indicator. Note that this callback block captures self in order to be able to call the hideProgressIndicator method when invoked. It’s important to take care when capturing self because it’s easy to create a strong reference cycle, as described later in Avoid Strong Reference Cycles when Capturing self.

    In terms of code readability, the block makes it easy to see in one place exactly what will happen before and after the task completes, avoiding the need to trace through delegate methods to find out what’s going to happen.

    The declaration for the beginTaskWithCallbackBlock: method shown in this example would look like this:

    - (void)beginTaskWithCallbackBlock:(void (^)(void))callbackBlock;
    The (void (^)(void)) specifies that the parameter is a block that doesn’t take any arguments or return any values. The implementation of the method can invoke the block in the usual way:

    - (void)beginTaskWithCallbackBlock:(void (^)(void))callbackBlock {
        ...
        callbackBlock();
    }
    Method parameters that expect a block with one or more arguments are specified in the same way as with a block variable:

    - (void)doSomethingWithBlock:(void (^)(double, double))block {
        ...
        block(21.0, 2.0);
    }
    A Block Should Always Be the Last Argument to a Method

    It’s best practice to use only one block argument to a method. If the method also needs other non-block arguments, the block should come last:

    - (void)beginTaskWithName:(NSString *)name completion:(void(^)(void))callback;
    This makes the method call easier to read when specifying the block inline, like this:

        [self beginTaskWithName:@"MyTask" completion:^{
            NSLog(@"The task is complete");
        }];


  • 相关阅读:
    mybatis配置
    mybatis 多表查询 与配置
    Maven中资源导出问题解决方案--pom.xml配置
    【macOS】Mac App Store 无法 更新/下载
    【macOS】删除 Mac 上的 Office 许可证文件
    【前端】JavaScript学习笔记(一)——快速入门
    【前端】CSS3学习笔记(五)——定位
    【前端】CSS3学习笔记(四)——浮动
    【前端】CSS3学习笔记(三)——盒子模型
    【macOS】清除Finder 「前往」(⌘
  • 原文地址:https://www.cnblogs.com/NSNULL/p/4482350.html
Copyright © 2011-2022 走看看