IOS常見的三種回調方法介紹

來源:互聯網
上載者:User

標籤:

認識下三種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. }

>

IOS常見的三種回調方法介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.