• ios-block回调


    1、block是什么?block是一个特殊的OC对象,它建立在栈上, 而不是堆上, 这么做一个是为性能考虑,还有就是方便访问局部变量.

    默认情况下block使用到的局部变量都会被复制,而不是保留.
    所以它无法改变局部变量的值.
    如果在变量面前加上__block, 那么编译器回去不会复制变量, 而是去找变量的地址, 通过地址来访问变量, 实际上就是直接操作变量.
    另外块是在栈上分配的, 所以一旦离开作用域, 就会释放, 因此如果你要把快用在别的地方, 必须要复制一份.
    所以在属性定义一个快的时候需要使用copy:  @property (nonatomic, copy) void (^onTextEntered)(NSString *enteredText);
    块是不能保留的, retain对块没有意义.
    2、block能干什么?
    block可以实现一件事干完之后,再去干另一件事
    block可以自定义另一件事

    #import "ViewController.h"

     

    typedef void(^done1)(NSString *message);

    typedef int(^done2)(NSString *message);

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        // Do any additional setup after loading the view, typically from a nib.

        

    //    [self loadHttpRequest:^(NSString *message)

    //     {

    //         NSLog(@"在控件上显示配置数据:%@",message);

    //     }];

    //    

    //    [self loadHttpRequest_1:^int(NSString *message) {

    //        NSLog(@"%d",(int)[message integerValue]);

    //

    //        return (int)[message integerValue];

    //        

    //    }];

        

        [self loadHttpRequest:^(NSString *message) {

            NSLog(@"在控件上显示配置数据:%@",message);

     

        }];

        

        [self loadHttpRequest1:^int(NSString *message) {

            NSLog(@"%d",(int)[message integerValue]);

            return (int)[message integerValue];

        }];

     

    }

     //省略block名字

    //- (void)loadHttpRequest:(void(^)(NSString *message))completion

    //{

    //    //假设加载出来的数据

    //    NSString *data = @"1";

    //    //回调,去配置数据

    //    completion(data);

    //}

    //省略block名字

    //- (void)loadHttpRequest_1:(int(^)(NSString *message))completion

    //{

    //    //假设加载出来的数据

    //    NSString *data = @"1";

    //    //回调,去配置数据

    //    completion(data);

    //}

     

     //定义block名字

    - (void)loadHttpRequest:(done1)completion

    {

            //假设加载出来的数据

            NSString *data = @"1";

            //回调,去配置数据

            completion(data);

    }

     //定义block名字

    - (void)loadHttpRequest1:(done2)completion

    {

        //假设加载出来的数据

        NSString *data = @"1";

        //回调,去配置数据

        completion(data);

    }

     

     

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

     

  • 相关阅读:
    hdu 1712(分组背包)
    hdu 3033(好题,分组背包)
    阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)
    hdu 1559(最大子矩阵)
    hdu 1080(LCS变形)
    POJ 3458 Colour Sequence
    HUST 1599 Multiple
    HDU 3903 Trigonometric Function
    HUST 1605 Gene recombination
    UVA 11551 Experienced Endeavour
  • 原文地址:https://www.cnblogs.com/rankilau/p/4626708.html
Copyright © 2020-2023  润新知