NSProxy使用笔记
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 ...
- 【运维学习笔记】生命不息,搞事开始。。。
001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...
- SSAN 关系抽取 论文笔记
20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...
- pandas以前笔记
# -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 王道考研 计算机网络笔记 第六章:应用层
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...
- 王道考研 计算机网络笔记 第五章:传输层
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...
最新文章
- 金融风控实战—模型可解释之shap
- 前美团产品专家罗鑫:谈谈我对增长这件事的理解
- 查找单项链表中间元素,若有相同,取第一个
- /bin/tar: 从成员名中删除开头的“/”
- MATLAB基础学习笔记01:初探MATLAB世界
- 好文力荐 | MySQL 索引、B+树原理以及建索引的几大原则
- 《Solution-Centric Organization》解决方案导向型组织 节选 IV
- php写入word文档内容,如何在PHP中读取和写入WORD文档
- 关于SQL语句中的双引号、单引号和
- thinkphp5项目--企业单车网站(二)
- 使用ppmap检测和利用XSS漏洞
- Java多线程笔记(刘意day23、24)
- Windows重新生成UEFI引导,解决Windows蓝屏\BCD 0xc0000098
- 如何同时将多张图片进行批量无损压缩、调整尺寸及调整大小
- Android信鸽推送全解
- 【控制工程】啥是控制工程?拉开控制工程的帷幕
- Linux提示 /usr/bin/ld:cannot find-lxxx 系列解决方法
- 高一末计算机考试试题,高一计算机第一学期期末试题
- Yan LeCun会是AI界的居里夫人吗?
- C# 矩阵库 功能特别强大!!
热门文章
- 浏览器主页被360劫持的解决办法
- 【Redis】解决全局唯一 id 问题
- centos 6.5和centos7防火墙1
- windows 7 home basic 上安装iis 和php运行环境
- main函数带参作用
- 太厉害了:雄霸美国的黑市拳王,竟然是中国人!
- linux mint镜像源设置,linuxmint 安装国内源
- QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件
- 金三银四求职季,面试阿里Java岗你必须知道些什么!
- Java岗面试:java开发是什么职业