回调(自定义实现)

对象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: }
时间: 2025-01-04 13:02:19

回调(自定义实现)的相关文章

Android中自定义veiw使用Java中的回调方法

//------------------MainActivity----中---------------------------------- import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Toast; public class MainActivity extends Activity { p

Github项目解析(十一)--&gt;一个简单,强大的自定义广告活动弹窗

转载请标明出处:一片枫叶的专栏 上一篇文章中讲解了我最近写的一个快速集成二维码扫描库,其核心的实现扫描的功能,是通过调用ZXing库实现的.由于在实现二维码扫描功能的时候发现集成二维码扫描功能并不是特别方便,于是有了将其制作成标准库的想法,这个二维码库能够快速,方便的集成二维码扫描功能,项目地址是在:android-zxingLibrary**,在项目开源后有不少同学提出了许多不错的意见,目前也在不断的迭代中,自己也学到了很多. 本文我们将讲解一个简单,强大的广告活动弹窗控件.不少App在打开的

自定义View分类与流程

自定义View分类与流程(进阶篇)## 转载出处: http://www.gcssloop.com/customview/CustomViewProcess/ 自定义View绘制流程函数调用链(简化版) 一.自定义View分类(非官方分类)### 1.自定义ViewGroup#### 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成的组件,大多继承自ViewGroup或各种Layout,包含有子View. 例如:应用底部导航条中的条目,一般都是上面图标(ImageView),

Android学习之界面篇(九)SurfaceView简单学习

知识点: surfaceview介绍 surfaceview与View的区别,surface与surfaceview的区别 实例创建与使用 SurfaceHolder.Callback的使用,surfaceHolder可以看作是surfaceview的控制器,控制图形的大小,像素等. 在主函数中回调函数的使用getHolder.addCallback(this) canvas的锁定与解锁,绘制图形之前锁定画布,绘制结束之后解锁画布. canvas的save与restore, canvas画布的各

asp.net数据缓存(应用程序缓存)

应用程序缓存是用来存储与应用程序相关的对象,主要是由Cache类来实现的.命名控件: using System.Web.Caching;添加缓存1.指定键和值   Cache["key"] = "value"; 这种方法添加缓存最方便,但是如果需要设置缓存的有效期.依赖项等特性,它就变得无能为力了 2.使用Add()方法——只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项,则会失败).   Cache.Add("key",&q

Rxjava+ReTrofit+okHttp深入浅出-终极封装四(多文件下载之断点续传)

Rxjava+ReTrofit+okHttp深入浅出-终极封装四(多文件下载之断点续传) 背景 断点续传下载一直是移动开发中必不可少的一项重要的技术,同样的Rxjava和Retrofit的结合让这个技术解决起来更加的灵活,我们完全可以封装一个适合自的下载框架,简单而且安全! 效果 实现 下载和之前的http请求可以相互独立,所以我们单独给download建立一个工程moudel处理 1.创建service接口 和以前一样,先写接口 注意:Streaming是判断是否写入内存的标示,如果小文件可以

OSG开发概览(转载)

OSG开发概览 1 OSG基础知识 Ø OSG是Open Scene Graphic 的缩写,OSG于1997年诞生于以为滑翔机爱好者之手,Don burns  为了对滑翔机的飞行进行模拟,对openGL的库进行了封装,osg的雏形就这样诞生了,1998年Don burns 遇到了同样喜欢滑翔机和计算机图形学的Robert Osfield ,从此Robert Osfield加入了osg小组的开发并一直担任开发小组的组长. Ø OSG不但有openGL的跨平台的特性和较高的渲染性能,还提供了一系列

大写金额换算器iOS版源代码

大写金额换算器iOS版源代码 人民币金额大写转换器输入数字即可转换成对应的人民币大写金额,操作非常简单,需一键点击,即可复制.是财务办公人员必备的小工具. 银行.单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确.及时和安全.票据和结算凭证是银行.单位和个人凭以记载账务的会计凭证,是记载经济业务和明确经济责任的一种书面证明.因此,填写票据和结算凭证必须做到标准化.规范化.要素齐全.数字正确.字迹清晰.不错漏.不潦草.防止涂改. 中文大写金额数字应用正楷

ckeditor添加自定义按钮整合swfupload实现批量上传图片

ckeditor添加自定义按钮整合swfupload实现批量上传图片给ckeditor添加自定义按钮,由于ckeditor只能上传一张图片,如果要上传多张图片就要结合ckfinder,而ckfinder是收费的,所以就想通过自定义按钮整合swfupload实现一次上传多张图片的功能首先下载并安装ckeditor.下载swfupload解压拷贝到对应的文件目录下3.自定义工具栏按钮:我们可以自定义ckeditor工具栏要显示的按钮,工具栏按钮定义可以参考这里.现在我们需要向工具栏添加一个自定义功能

Android学习之智能聊天机器人(图灵机器人)

今天我们来分享一个有趣的应用:Android版的智能聊天机器人 开发工具:Eclipse 开发时间:2015/07/07 所用技术:图灵机器人API  网络通信之异步请求 接口回调  自定义Adapter 下面我将详细叙述开发的步骤: 第一步:申请图灵机器人的API KEY 方法很简单,只需要在图灵机器人API官网注册一个账号,注册成功之后,会显示一个API KEY 图灵机器人API 账号注册网址:图灵机器人 注册成功后,点击平台接入,认真看一下API接入的流程 第二步:开始创建工程进行编码,首