• 回调(自定义实现)


    对象A让对象B去做事情,当对象B做完事情后,需要告知对象A完成了制定的事情。这就是回调的一种使用方法

    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础。

    在这个Demo中,在类B中实例类A,类A调用自己的方法Method1,但是Method1种调用的Method2却在类B中实现。这样就称作回调。。。。。。

    在ios开发过程中,经常会遇到B类调用A类的某一个方法,调用完A类方法之后,再执行B类中的其他方法的操作。

    通常的做法有两种:

    1、通过Delegete来实现;

    2、通过通知NSNotificaitionCenter的方式实现;

    由于这两种方式比较常见所以就不在解释其使用方法了,这里重点说一下自定义的方式(由方式1简化而来的):

    自定义方式实现回调  具体代码:

    1、创建一个工程名CallBackDemo,在ViewController.xib文件加入一个button按钮,ViewController.h代码:

    1: #import <UIKit/UIKit.h>
    2:  
    3: @interface ViewController : UIViewController{
    4: IBOutlet UIButton *clickButton;
    5: }
    6:  
    7: - (IBAction)onClickButtonTouchUpInside:(id)sender;
    8:  
    9: @end

    上述第7行代码,便是点击button触发的事件操作。

    2、ViewController.m代码:

    1: //
    2: // ViewController.m
    3: // CallBackDemo
    4: //
    5: // Created by jordy on 11-10-28.
    6: // Copyright (c) 2011年 __MyCompanyName__. All rights reserved.
    7: //
    8:  
    9: #import "ViewController.h"
    10: #import "EventObject.h"
    11:  
    12: @implementation ViewController
    13:  
    14:  
    15: - (void)viewDidLoad
    16: {
    17: [super viewDidLoad];
    18: }
    19:  
    20: - (IBAction)onClickButtonTouchUpInside:(id)sender
    21: {
    22: NSLog(@"onClickbutton...");
    23: EventObject *eventObject = [[[EventObject alloc] init] autorelease];
    24: [eventObject setDelegateObject:self setBackFunctionName:@"handleBackFunction"];
    25: [eventObject handleEventObject];
    26: }
    27:  
    28: - (void)handleBackFunction
    29: {
    30: NSLog(@"执行完eventObject函数之后的具体的操作。。。。");
    31: }
    32:  
    33: - (void)viewDidUnload
    34: {
    35: [super viewDidUnload];
    36: }
    37:  
    38: @end

    此类使用到了EventObject类,下面看一下EventObject类的代码。

    3、EventObject.h代码:

    1: @interface EventObject : NSObject {
    2: id callbackObject;//回调类
    3: NSString *callbackFunction; //回调的函数名
    4: }
    5:  
    6: - (void)handleEventObject;
    7:  
    8: - (void)setDelegateObject:(id)cbobject setBackFunctionName:(NSString *)selectorName;

    EventObject.m代码:

    1: #import "EventObject.h"
    2:  
    3: @implementation EventObject
    4:  
    5: - (void)handleEventObject
    6: {
    7: NSLog(@"执行本类的操作");
    8:
    9: //执行回调操作
    10: SEL func_selector = NSSelectorFromString(callbackFunction);
    11: if ([callbackObject respondsToSelector:func_selector]) {
    12: NSLog(@"回调成功...");
    13: [callbackObject performSelector:func_selector];
    14: }else{
    15: NSLog(@"回调失败...");
    16: }
    17:
    18: }
    19:  
    20: //赋值回调
    21: - (void)setDelegateObject:(id)cbobject setBackFunctionName:(NSString *)selectorName
    22: {
    23: callbackObject = cbobject;
    24: callbackFunction = selectorName;
    25: }
    26:  
    27: - (void)dealloc
    28: {
    29: [super dealloc];
    30: }
  • 相关阅读:
    vim 真是上瘾啊
    乐此不疲
    .vimrc .bashrc
    github
    隐藏c语言烦人的{ }
    linux mint console-setup
    samsung n143 brightness on linux mint
    荒漠甘泉——1月31日
    嵌入式 方向?
    python2与python3的区别
  • 原文地址:https://www.cnblogs.com/changeUniversal/p/4638153.html
Copyright © 2020-2023  润新知