zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    新数学丛书《连分数》 习题 1.1
    连分数中一个有意思的小玩意儿
    无聊博文之:用同余的语言阐述欧几里德算法
    有向无环图
    Codeforces Round #658 (Div. 2)
    常用代码模板3——搜索与图论
    什么是动态规划?动态规划的意义是什么?(转自知乎)
    Codeforce:4C. Registration system (映射)
    C++与正则表达式入门
    常用代码模板4——数学知识
  • 原文地址:https://www.cnblogs.com/dlx-Blog/p/4425501.html
Copyright © 2011-2022 走看看