一、method-swizzling 简介

  • method-swizzling 的含义是方法交换,其主要作用是在运行时将一个方法的实现替换成另一个方法的实现,这就是我们常说的 iOS 黑魔法。
  • 在 OC 中就是利用 method-swizzling 实现 AOP,其中 AOP(Aspect Oriented Programming,面向切面编程)是一种编程的思想,区别于OOP(面向对象编程);
    • OOP 和 AOP 都是一种编程的思想;
    • OOP 编程思想更加倾向于对业务模块的封装,划分出更加清晰的逻辑单元;
    • 而 AOP 是面向切面进行提取封装,提取各个模块中的公共部分,提高模块的复用率,降低业务之间的耦合性。
  • 每个类都维护着一个方法列表,即 methodList,methodList 中有不同的方法即 Method,每个方法中包含了方法的 sel 和 IMP,方法交换就是将 sel 和 imp 原本的对应断开,并将 sel 和新的 IMP 生成对应关系。
  • sel 和 IMP 交换之前的对应关系:
  • sel 和 IMP 交换之后的对应关系:

iOS之深入解析Runtime的Method-Swizzling方法交换的妙用和底层原理相关推荐

  1. iOS之深入解析Runtime的objc_msgSend“慢速查找”底层原理

    CacheLookup 快速查找 objc_msgSend 通过汇编 快速查找方法缓存 ,如果能找到则调用 TailCallCachedImp 直接将方法缓存起来然后进行调用,如果查找不到就跳到 Ch ...

  2. runtime(四) method swizzling 与AOP编程

    什么是 AOP : (site: baike.baidu.com),引用百度百科中的解释就是: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过 ...

  3. iOS之深入解析Runtime的objc_msgSend“快速查找”底层原理

    Runtime 一.什么是 runtime ? Objective-C 语言将尽可能多的决策从 编译时和链接时 推迟到运行时.只要有可能,它就 动态 地做事情,这意味着该语言不仅需要一个编译器,还需要 ...

  4. iOS经典面试题之分析self class与super class的区别和底层原理

    一.self 和 super 的区别 [self class] 是类的一个隐藏参数,每个方法的实现的第一个参数即为 self,就是发送消息 objc_msgSend,消息接收者是 self,方法编号 ...

  5. iOS 开发:『Runtime』详解(二)Method Swizzling

    本文用来介绍 iOS 开发中『Runtime』中的黑魔法Method Swizzling. 通过本文,您将了解到: Method Swizzling(动态方法交换)简介 Method Swizzlin ...

  6. iOS总结-Runtime篇之黑魔法Method Swizzling的滥用会有危险吗

    参考https://www.jianshu.com/p/19c5736c5d9a, http://blog.sina.com.cn/s/blog_a343f32b0101en4o.html runti ...

  7. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...

  8. iOS之深入解析消息转发objc_msgSend的应用场景

    一.消息转发 现有如下示例: id o = [NSObject new]; [o lastObject]; 执行上面代码,程序会崩溃并抛出以下异常: [NSObject lastObject]: un ...

  9. iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

    前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...

最新文章

  1. [HNOI 2010]Bounce 弹飞绵羊
  2. 霍山职业学校16届计算机学生,霍山职高(安徽霍山职业学校)
  3. python数字类型转换函数_Python的数据类型转换函数
  4. python【力扣LeetCode算法题库】46- 全排列
  5. 技术人员如何参与产品设计讨论:激活那一潭死水
  6. 怎么重写MDK(KEIL)Flash烧写程序
  7. 汇编语言笔记(三): 标志寄存器
  8. vb.net 中最小化到托盘和锁定窗体大小的问题(notifyIcon的两个重要属性)
  9. Linux 实操———CentOS 6 安装配置 Tomcat
  10. iscroll5实现一个下拉刷新上拉加载的效果
  11. 为什么董明珠愿意让她“孙子”喝飞鹤奶粉?
  12. vue.js 源代码学习笔记 ----- instance inject
  13. 什么是chirp信号
  14. 【Grafana】通过阿里云日志服务监控Nginx访问日志显示统计信息
  15. 夏至 | 心怀热忱,认真生活 ;不负时光,不负自己
  16. Halo博客建站小记
  17. 最全面计算机英语单词列表(三)
  18. 人工智能轨道交通行业周刊-第9期(2022.8.8-8.14)
  19. Notes Sixth day-渗透攻击-红队-打入内网
  20. Ableton Live 11 Suite v11.1.0 WiN-MAC 电音制作宿主软件

热门文章

  1. 同居1月 VS 同居1年,太真实了...
  2. PHP中被忽略的性能优化利器:生成器
  3. sphinx conf 文件模板
  4. Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)
  5. wtl for duilib 运行良好
  6. 百度域名出现问题 2010-1-12号的杯具
  7. 错误信息 c语言实现_全国计算机等级考试二级C语言
  8. 恒为linux笔试题,硬件工程师面试试题及答案(转)
  9. JAVA之获取JavaSwing单选框JRadioButton选中的值(内容)
  10. 如何给页面加上loding_怎么做404页面?