delegate 代理-IOS代理协议方法是如何被调用的?

问题描述

IOS代理协议方法是如何被调用的?

这几天一直在思考代理的工作原理。代理可以获得事件或数据信息、调用与此信息相关的方法、把信息传给该方法,实现对事件或数据信息的回应。
这里我最大的疑惑是,代理如何把事件与方法对应起来?例如:A对象定义了一组代理协议,B对象作为A的代理,实现了所有的协议方法,当某个事件发生时,A的代理如何知道应该调用哪个协议方法?是根据方法名吗?我怀疑是因为所有代理都继承自NSObject协议,这一组协议可能使代理具有了神奇的功能。
另一个令我疑惑的事情是,自定义代理与现成的代理有什么区别?现成代理,例如UITableViewDelegate,哪个代理方法对应什么事件,手册上都有明确说明;自定义代理呢?我心里想的是,这个代理方法要对某某事件作出反应,可一定会吗?
假如代理的工作模式是:A定义了代理,则在事件发生时(系统认定为事件的),自动找代理,看代理声明了几个方法,然后看这个事件属于哪个方法来处理(关键问题还是在这里,如何确定事件与方法的对应关系?),然后看这个方法有没有被B实现。
望大牛指教!

解决方案

http://blog.csdn.net/pony_maggie/article/details/25655443
http://dcm19872007.blog.163.com/blog/static/8651937420127170547907/

解决方案二:

ios 进阶 -- 调用webservice接口(soap协议)的方法
iOS使用代理方法的调用模式
iOS AppDelegate协议方法

时间: 2024-08-04 02:15:00

delegate 代理-IOS代理协议方法是如何被调用的?的相关文章

jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解_jquery

本文实例分析了jQuery中bind(),live(),delegate(),on()绑定事件方法.分享给大家供大家参考,具体如下: 前言 因为项目中经常会有利用jquery操作dom元素的增删操作,所以会涉及到dom元素的绑定事件方式,简单的归纳一下bind,live,delegate,on的区别,以便以后查阅,也希望该文章日后能帮助到各位朋友,文中如有不当之处,还望各位指正,话不多说,直接进入正题. 一.bind() 简要描述 bind()向匹配元素添加一个或多个事件处理器. 使用方式 复制

自动化Nginx服务器的反向代理的配置方法

  这篇文章主要介绍了自动化Nginx服务器的反向代理的配置方法,反向代理是Nginx服务器的招牌功能,需要的朋友可以参考下 如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的. 在以前的文章中,我解释了"一些使用反向代理的好处".在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件.我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速.可靠且易于配置.我们通过它将多个

【设计模式】【动态代理,在方法前和方法后加事务,AOP】

/** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2010, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Da

c# 反射-Delegate.CreateDelegat 抛出异常:方法绑定失败

问题描述 Delegate.CreateDelegat 抛出异常:方法绑定失败 异常: System.ArgumentException:绑定到目标方法时出错PS:MenuItem_Clicked 方法通过反射方式已经可以调用 代码: 绑定到Delegate string methodName = "MenuItem_Clicked"; MethodInfo menuItemClicked = funType.GetMethod(methodName); if (menuItemCli

uitableview-不理解UITableView代理中这个方法,大神详解一下

问题描述 不理解UITableView代理中这个方法,大神详解一下 (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 这个方法是返回cell的行数,但是不理解,创建一个tableView,为什么这个方法会在创建cell之前,总是走三次,为什么会走三次? 解决方案 numberOfRowsInSection 返回当前组有多少行, 走三次应该是你设置了有三个组. 编译器每创建一

详解jquery事件delegate()的使用方法_jquery

我们先看官方是怎么说delegate()方法,delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数,使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素).语法很简单 $(selector).delegate(childSelector,event,data,function) 参数说明 childSelector 必需.规定要附加事件处理程序的一个或多个子元素. event 必需.规定

Castle~动态代理实现对方法的拦截

昨天写了关于使用Castle.Windsor来实现IOC功能,今天需要写一下使用Castle实现对方法的拦截,这实事上是.net平台实现AOP编程的基础,当你可以对方法进行拦截时,你就可以动态地干很多事,如在方法执行前做权限验证,执行后到日志记录,异常处理等等,怎么样看到这里,胃口来了吧,呵呵,对于技术痴迷者来说,这是正常的,好了,说干就干! 前言:我们在开发项目时,你的项目可能已经上线运营了,内部的代码如果修改风险是很大的,这当然也不符合OCP了,你这前的代码在运营过程中已经将BUG修改完成,

iOS重写父类中的方法时要先调用父类中的方法的原因

现有两个类: 1.Object001继承自NSObject #import <Foundation/Foundation.h>   @interface Object001 : NSObject   //Object001的头文件,我只是在这里面声明了个方法 -(void)printfString;   @end   #import "Object001.h"   @implementation Object001   //Object001的实现文件,我实现了声明的pri

link中如何判断一个事件里面有几个方法?如何选择性调用?

问题描述 link中如何判断一个事件里面有几个方法?如何选择性调用? link中如何判断一个事件里面有几个方法?如何选择性调用? 解决方案 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text;