IOSRunTime_方法交换

RunTime_运行时详解

运行时机制:

消息发送机制:

RunTime 运行时:苹果提供了一个API,属于C语言的库
RunTime作用:

  1. 利用RunTime运行时,在程序的运行过程中,动态创建一个类。
  2. 利用RunTime运行时,在程序的运行过程中,动态修改一个类的属性/方法。
  3. 利用RunTime运行时,遍历一个类的所有属性和方法。

头文件:<objc/runtime> <objc/message>(包含了runtime)
Method:成员方法
Ivar :成员变量
利用RunTime实现方法交换(以NSURL为例)

- NSURL+url.h

#import <Foundation/Foundation.h>
@interface NSURL (url)
+ (instancetype)LL_URLWithStr: (NSString *)str;
@end

- NSURL+url.m

#import "NSURL+url.h"
#import <objc/message.h>

@implementation NSURL (url)

//当这个类被加载的时候
+ (void)load {
//    方法交换!!!
//    思路:拿到两个方法(Method),然后通过runtime提供的方法交换函数进行交换
//    拿到两个Method
//    class_getClassMethod     拿到一个类的类方法
//    class_getInstanceMethod  拿到一个类的对象方法

    Method URLWith = class_getClassMethod([NSURL class], @selector(URLWithString:));
    Method LL_URL  = class_getClassMethod([NSURL class], @selector(LL_URLWithStr:));
    //交换方法
    method_exchangeImplementations(URLWith, LL_URL);
}
+ (instancetype)LL_URLWithStr:(NSString *)str{
    NSURL *url = [NSURL LL_URLWithStr:str];
    if (url == nil) {
        NSLog(@"URL为空");
    }
    return url;
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,814评论 0 9
  • 对于从事 iOS 开发人员来说,所有的人都会答出【runtime 是运行时】什么情况下用runtime?大部分人能...
    梦夜繁星阅读 3,734评论 7 64
  • 参考链接: http://www.cnblogs.com/ioshe/p/5489086.html 简介 Runt...
    乐乐的简书阅读 2,166评论 0 9
  • 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的转载 这篇文章完全是基于南峰子老师博客的...
    西木阅读 30,649评论 33 466
  • “你要是想去就去呗。” 黑格尔把烟掐灭,起身去院子里招呼客人。 周染挥挥手,驱散面前混着香烟味的空气。闻了这么多年...
    Reeeeeeese阅读 401评论 0 0