• IOS常见的三种回调方法介绍


    认识下三种IOS常见的回调模式。

    代理模式作为IOS中最常见的通讯模式,代理几乎无处不在。

     



    这里有一个数组,我们首先通过代理的方式将数组传递到其他方法中去。

    设置协议及方法

    1. @protocol CallBackDelegate;
    2. @interface ViewController : UIViewController
    3. @property (weak, nonatomic) id<CallBackDelegate> delegate;
    4. @end
    5. @protocol CallBackDelegate <NSObject>
    6. - (void)showArrayWithDelegate:(NSArray *)array;
    7. @end

    @interface ViewController () <CallBackDelegate>


    点击按钮传递数组让其显示

    1. - (IBAction)delegateCallBack
    2. {
    3.     NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
    4.     NSArray *array = dict[@"array"];
    5.     [self.delegate showArrayWithDelegate:array];
    6. }

    调用,显示

    1. - (void)showArrayWithDelegate:(NSArray *)array
    2. {
    3.     _outputLabel.text = array[2];
    4. }

    最重要也是最容易忽略的,就是一定要设置delegate的指向。
    完成后屏幕显示
     



    使用通知中心
    通知中心的方式可以不用设置代理,但是需要设置观察者和移除观察者。

     


    代码

    1. - (IBAction)callBack
    2. {
    3.     NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
    4.     NSArray *array = dict[@"array"];
    5.     [[NSNotificationCenter defaultCenter] postNotificationName:@"OutputArrayNotification" object:array];
    6. }

    注册和移出观察者

    1. - (void)viewWillAppear:(BOOL)animated
    2. {
    3.     [super viewWillAppear:animated];
    4.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(outputWithNote:) name:@"OutputArrayNotification" object:nil];
    5. }
    6. - (void)viewDidDisappear:(BOOL)animated
    7. {
    8.     [super viewDidDisappear:animated];
    9.     [[NSNotificationCenter defaultCenter] removeObserver:self name:@"OutputArrayNotification" object:nil];
    10. }

    显示

    1. - (void)outputWithNote:(NSNotification *)aNotification
    2. {
    3.     NSArray *receiveArray = [aNotification object];
    4.     _outputLabel.text = receiveArray[0];
    5. }

     



    Block
    什么是Block:从C的声明符到Objective-C的Blocks语法
    块代码以闭包得形式将各种内容进行传递,可以是代码,可以是数组无所不能。块代码十分方便将不同地方的代码集中统一,使其易读性增强。


    来看这里怎么进行数组传递。

    typedef void (^Arr_Block)(NSArray *array);

    1. - (void)showArrayUsingBlock:(Arr_Block)block
    2. {
    3.     NSDictionary *dict = @{@"array": @[@"Chelsea", @"MUFC", @"Real Madrid"]};
    4.     NSArray *array = dict[@"array"];
    5.     block(array);
    6. }

    调用方法,显示

    1. - (IBAction)blockCallBack
    2. {
    3.     [self showArrayUsingBlock:^(NSArray *array) {
    4.         _outputLabel.text = array[1];
    5.     }];
    6. }

    >

  • 相关阅读:
    JavaEye推荐:软件开发的葵花宝典 zt
    杨建:网站加速系统架构篇
    杨建:网站加速Cache为王篇
    整理:不用ACE你不知道ACE有多烂,给饱受ACE折磨的弟兄们散分了。
    jQuery对select操作 dodo
    easyui事件和方法的调用 dodo
    .Net 下利用ICSharpCode.SharpZipLib.dll实现文件压缩、解压缩 dodo
    使用Jquery EasyUi常见问题解决方案 dodo
    如何切分用户故事 dodo
    什么是产品Backlog,什么是Sprint Backlog? dodo
  • 原文地址:https://www.cnblogs.com/changeUniversal/p/4638575.html
Copyright © 2020-2023  润新知