1.多层集成,一个类继承多个类,使它同时拥有两个类的属性和方法,但是oc不支持多重继承,但是这里可使用NSProxy的消息转发机制让他调用其他类的方法.

使用NSProxy实现代理

学习的博文地址:http://blog.csdn.net/onlyou930/article/details/7548476

个人觉得这功能没有具体的价值,还不直接使用代理

2. 个人使用笔记,使用NSProxy实现消息(方法)的拦截,可以实现方法的转换,具体有什么使用价值还没有发现.只是现在的项目中用到了这样的一段代码.外面直接传一个类名进来,然后同时调用协议方法,然后截取协议方法名作为网络请求的url,然后让这个方法跳转到网络请求方法中去.

我们如果需要使用它可以继承自他,然后必须实现以下两个方法

//instanceMethodSignatureForSelector :

//返回一个NSMethodSignature对象,里面记录了方法的参数类型和返回值

//仅仅是记录,最后还是又下一个forward方法决定使用哪个方法

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector

{

SEL eSelector = @selector(postRequestWithURL::);//获取这个方法的实现地址

NSMethodSignature *sign = [[self.handler class]instanceMethodSignatureForSelector:eSelector];

//这里如果没有就调用父类的这个方法,返回父类的,不然或抛出异常

return sign;

}

/**

*   把invocation传递给真的代理对象

*

*  @param invocation 是用来对象之间或是程序之间存储和发送信息,里面放置了那个对象调用那个函数,需要的参数

*/

- (void)forwardInvocation:(NSInvocation *)invocation

{

/* 获取方法名 */

NSString *selectorName = [self getNameFromSelector:invocation.selector];//自己写的方法,调试用的

//拼接url : http://192.168.1.252:81/Member/login

NSString *url = [NSString stringWithFormat:@"http://%@/%@/%@",self.baseUrl,self.className,selectorName];

/* 方法跳转 */

//设置调用者也,在这里设置的是self.hander

[invocation setTarget:self.handler];

//设置调用的方法

[invocation setSelector:@selector(postRequestWithURL::)];

//如果此消息有参数需要传入,那么就需要按照如下方法进行参数设置,需要注意的是,atIndex的下标必须从2开始。原因为:0 1 两个参数已经被target 和selector占用

[invocation setArgument:&url atIndex:3];

//retain 所有参数,防止参数被释放dealloc

[invocation retainArguments];

//消息调用

[invocation invoke];

return;

}

转载于:https://www.cnblogs.com/dlx-Blog/p/4425501.html

NSProxy使用笔记相关推荐

  1. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  2. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  3. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  4. pandas以前笔记

    # -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  9. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

最新文章

  1. 金融风控实战—模型可解释之shap
  2. 前美团产品专家罗鑫:谈谈我对增长这件事的理解
  3. 查找单项链表中间元素,若有相同,取第一个
  4. /bin/tar: 从成员名中删除开头的“/”
  5. MATLAB基础学习笔记01:初探MATLAB世界
  6. 好文力荐 | MySQL 索引、B+树原理以及建索引的几大原则
  7. 《Solution-Centric Organization》解决方案导向型组织 节选 IV
  8. php写入word文档内容,如何在PHP中读取和写入WORD文档
  9. 关于SQL语句中的双引号、单引号和
  10. thinkphp5项目--企业单车网站(二)
  11. 使用ppmap检测和利用XSS漏洞
  12. Java多线程笔记(刘意day23、24)
  13. Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
  14. 如何同时将多张图片进行批量无损压缩、调整尺寸及调整大小
  15. Android信鸽推送全解
  16. 【控制工程】啥是控制工程?拉开控制工程的帷幕
  17. Linux提示 /usr/bin/ld:cannot find-lxxx 系列解决方法
  18. 高一末计算机考试试题,高一计算机第一学期期末试题
  19. Yan LeCun会是AI界的居里夫人吗?
  20. C# 矩阵库 功能特别强大!!

热门文章

  1. 浏览器主页被360劫持的解决办法
  2. 【Redis】解决全局唯一 id 问题
  3. centos 6.5和centos7防火墙1
  4. windows 7 home basic 上安装iis 和php运行环境
  5. main函数带参作用
  6. 太厉害了:雄霸美国的黑市拳王,竟然是中国人!
  7. linux mint镜像源设置,linuxmint 安装国内源
  8. QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件
  9. 金三银四求职季,面试阿里Java岗你必须知道些什么!
  10. Java岗面试:java开发是什么职业