代理的使用及其实现原理

代理是是什么?

代理可以提高代码的复用性

代理的作用:

1、封装变化点

2、解决类与类之间的强耦合性

3.、可以在类之间进行数据传递

什么情况下使用代理?

有一系列的变化点(比如我们所用的空间UIScrollView 有许多方法,苹果对其进行了封装,给用户提供了接口,用户只需遵守协议,然后实现协议方法即可)

能够让用户清晰的了解到哪些变化方法被封装起来了

实现代理需要以下的几个步骤:

定义协议方法

这里实现的是登录界面的封装,使用了代理的方法

声明协议

@protocol LoginViewDelegate <NSObject>

定义协议方法

-(void)loginViewLoginButtonToch:(LoginView *)loginView andName:(NSString
*)name andPwd:(NSString *)pwd;

创建属性 :

@property(nonatomic,assign)id<LoginViewDelegate>delegate;

id 是任意的返回值类型  这里的范围比较大,提高了代码可用性

在点击事件中调用协议的方法

//或得用户名和密码

NSString *name = self.usrName.text;

NSString *pwd = self.pwd.text;

[_delegate
loginViewLoginButtonToch:self
andName:name andPwd:pwd];

我们提供给用户一个接口 如果要在另外一个试图控制器中调用

1.引入头文件

#import "LoginView.h"

2.遵守协议

@interface
ViewController ()<LoginViewDelegate>

之后需要三步:

//1.创建一个Login
视图

LoginView *loginView = [LoginView loginView];

//2.建立视图之间的父子关系

[self.view addSubview:loginView];

//3.设置代理对象

loginView.delegate = self;

最后一步对协议方法进行调用

#pragma  mark LoginViewDelegate 方法

-(void)loginViewLoginButtonToch:(LoginView *)loginView andName:(NSString
*)name andPwd:(NSString *)pwd

{

NSLog(@"%@",NSStringFromSelector(_cmd));

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 14:07:34

代理的使用及其实现原理的相关文章

Java代理(Aop实现的原理)

经过大牛同事的一句指点立刻明白的代理实现方式,Spring Aop应该也是这么去做的.直接上代码 实现在Car的run方法之前调用star方法,在run方法之后调用stop方法. Car类 package com.lubby.test; public class Car { public void run() { System.out.println("I am running...."); } } Car的run方法之前和之后调用的方法 package com.lubby.test;

walker代理深入浅出——程序的启动原理(下)(探究 UIWindow)

上一节主要讲解了程序的启动原理UIApplication 的启动,以及 main 函数的执行,现在主要讲解界面的加载以及执行部分. UIWindow 下面先看看Apple的官方文档 Apple官方文档 UIWindow继承自UIView,UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.即使有多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件(即主窗口). iOS程序启动完毕后,先

Java反射学习总结四(动态代理使用实例和内部原理解析)

通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加相应的代理类.解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能或者说去动态的生成这个代理类,那么此时就必须使用动态代理完成. 动态代理知识点: Java动态代理类位于java.lang.reflect包下,主要有以下一个接口和一个类: 1.InvocationHandler接口:    

反射实现AOP动态代理模式(Spring AOP实现原理)

其实AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决问题的方法中的共同点,是对OO思想的一种补充! 还是拿人家经常举的一个例子讲解一下吧: 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录. 我们写个例子看看我们最简单的解决方案 我们先写一个接口IHello.java代码如下: package sinosoft.dj.aop.st

简单模拟java动态动态代理机制的底层实现原理

在网上学习了马士兵老师的设计模式视屏,过程中也有认真的做相应的笔记.在次分享我的一些成果,方便大家的进一步学习. 1.接口public interface Moveable {    void move();} 2.被代理的对象public class Tank implements Moveable { @Override    public void move() {                System.out.println("Tank Moving...");     

49_分析代理类的作用与原理及AOP概念

生活中的代理 武汉人从武汉的代理商手中买联想电脑和直接跑到北京传智播客旁边来找联想总部买电脑,你觉得最终的主体业务目标有什么区别吗?基本上一样吧,都解决了核心问题,但是,一点区别都没有吗?从代理商那里买的真的一点好处都没有吗? 程序中的代理 要为已经存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法.的运行时间.事务管理.等等,你准备如何做? 编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码.(参看

先看看解析,事件委托:也称事件代理 就是利用冒泡的原理 把加事件加到父级上,触发执行效果

window.onload = function(){ var oUl = document.getElementById('ull'); var aLi = document.getElementsByTagName('li'); oUl.onmouseover = function(ev){ var event = ev||window.event; // 获取event对象 var target = ev.target || ev.srcElement; // 获取触发事件的目标对象 if

JDK动态代理实现原理

之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的.直到看了他的文章才彻底明白,附网址:http://rejoy.iteye.com/blog/1627405 Java代码   package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import j

【转】JDK动态代理原理

之前虽然会用JDK的动态代理,但是有些问题却一直没有搞明白.比如说:InvocationHandler的invoke方法是由谁来调用的,代理对象是怎么生成的,直到前几个星期才把这些问题全部搞明白了.     废话不多说了,先来看一下JDK的动态是怎么用的. Java代码   package dynamic.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.