• 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;

    }

  • 相关阅读:
    C# 解析 json
    鸡汤一则
    jsp 环境配置记录
    jquery validate 自定义验证方法
    axure rp pro 7.0(页面原型工具)
    跨数据库服务器查询步骤
    .net 直接输出远程文件到浏览器和下载文件保存到本机
    URL中文乱码处理总结(转)
    使用ajax上传中遇到的问题
    Web 通信 之 长连接、长轮询(转)
  • 原文地址:https://www.cnblogs.com/dlx-Blog/p/4425501.html
Copyright © 2020-2023  润新知