zoukankan      html  css  js  c++  java
  • iOS 运行时使用(交换两个方法)

    举例 在创建了如下代码 

    NSString *str=nil;
        NSURL *url =[NSURL URLWithString:str];
        NSLog(@"%@",url);

    但是想使用自己的方法并对传入的字符串做为空判断

    举例 自己写了一个方法 

    +(instancetype)SJUrlWithStr:(NSString *)str 替代系统方法

    [NSURL URLWithString:]

      但是如果项目现在已经进行到了后期 就会涉及到很多界面要导入头文件 并修改使用这个方法 很不方便

    那么可以自己新建一个URL的分类 在分类中使用运行时交换两个系统的方法和自己的方法快速的实现方法交换

    #import "NSURL+Extension.h"
    #import <objc/message.h>
    @implementation NSURL (Extension)
    
    +(void)load{
        //获取系统方法结构体
        Method system = class_getClassMethod([self class], @selector(URLWithString:));
        //获取自己方法结构体
        Method own = class_getClassMethod([self class], @selector(SJUrlWithStr:));
        // 交换方法 系统的 URLWithString 和自己的 SJUrlWithStr
        //交换自己方法和系统方法
        method_exchangeImplementations(system, own);
        //以后再使用 URLWithString 的时候 其实是在调用SJUrlWithStr
    }
    
    +(instancetype)SJUrlWithStr:(NSString *)str{
        if (str==nil) {
            NSLog(@"字符串为空");
            return nil;
        }
        // 下面的 SJUrlWithStr 其实是使用了 URLWithString
        NSURL *url = [NSURL SJUrlWithStr:str];
        return url;
    }
    
    @end
  • 相关阅读:
    匿名函数
    Ajax
    Mysql 数据库操作
    Linux下查看apache连接数
    c++ 当输入的数据不符合数据类型时,清理输入流
    c++ 将输入存储到数组,然后反转数组,最后输出
    c++ 递归求一个数的阶乘
    c++ 计算彩票中奖概率
    c++ 结构体,设置物品体积并输出物品属性
    c++ 输入10个数,显示它的平均分
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/9131414.html
Copyright © 2011-2022 走看看