[Cocoa]深入浅出Cocoa之 Method Swizzling
罗朝辉(http://blog.csdn.net/kesalin)
CC许可,转载请注明出处
在前文深入浅出Cocoa之消息中,我简要介绍了ObjC 中消息的基本情况,包括SEL查找,缓存以及消息转发等。在本文中,我要介绍一个很有趣的技术,Method swizzling,通过这个手法,我们可以动态修改方法的实现,从而达到修改类行为的目的。当然,还有其他办法(如ClassPosing,Category)也可以达到这个目的。ClassPosing
是针对类级别的,是重量级的手法,Category 也差不多,比较重量级,此外 Category 还无法避免下面的递归死循环(如果你的代码出现了如下形式的递归调用,应该考虑一下你的设计,而不是使用在这里介绍的 Method Swizzling 手法,:))。
在前文
深入浅出Cocoa之消息中提到,ObjC 中的类(class)和实例(instance)都是对象,类对象有自己的类方法列表,实例对象有自己的实例方法列表,这些方法列表(struct objc_method_list)是存储在 struct objc_class 中的。每个方法列表存储近似 SEL:Method 的对,Method 是一个对象,包含方法的具体实现
impl。由此可知,我们只需要修改 SEL 对应的 Method 的 impl 既可以达到修改消息行为的目的。下面来看代码:
让我们来分析上面代码:
1,首先,区分类方法和实例方法;
2,取得 SEL 对应的 Method;
3,修改 Method 的 impl,在这里是通过交换实现的。
上面的代码是可以工作的,但还不够完善。Apple 10.5 提供了交换 Method 实现的 API:method_exchangeImplementations
。下面我们使用这个新
API,并以 NSObject category的形式给出新的实现方式:
代码就不用多解释了,下面我们来看如何使用。先看辅助类Foo:
Foo.h
Foo.m
下面是具体的使用示例:
分享到:
相关推荐
这是本人在学习和使用 Cocoa 开发过程...CSDN移动开发专栏《深入浅出Cocoa》包含了这个pdf 中的所有文章,并会持续添加新的文章,欢迎大家访问该专栏(http://blog.csdn.net/column/details/cocoa.html),查看最新情况。
适用于初学者,了解苹果公司的cocoa框架,为深入编程打下坚实的基础
苹果开发之Cocoa编程原书第4版,想学习mac app开发的可以先看看!
苹果开发之Cocoa编程(原书第4版).pdf
对于刚刚加入这个阵营的开发者来说, Cocoa像是一个巨大而未知的新世界。Cocoa开发环 境的各种特性、工具、概念、术语、编程接口、甚至是编程语言对他们来说可能都比较生 疏。 Cocoa基本原理指南提供了领略Cocoa...
Mantle 是 Cocoa 和 Cocoa Touch 的模型框架,你可以通过它为你的 Cocoa 和 Cocoa Touch 写简单的模型层。示例代码:@interface XYUser : MTLModel @property (readonly, nonatomic, copy) NSString *name;...
iOS 和 macOS 性能优化书。iOS and macOS Performance Tuning Cocoa, Cocoa Touch, Objective-C, and Swift
Cocoa Programming Developer’s Handbook 书籍以及配套源码 对应的中文译本名《Cocoa编程开发者手册》,这里提供的是其原本,技术人员建议还是读原本。 《Cocoa编程开发者手册》是关于MacOSX上CocoaAPI的指南,...
[奥莱理] Cocoa Objective-C 开发学习手册 第4版 (英文版) [奥莱理] Learning Cocoa with Objective-C 4th Edition (E-Book) ☆ 图书概要:☆ You’ll learn how to work with the Xcode IDE, Objective-C’s ...
这本书手把手教你使用xcode开发cocoa程序,菜鸟必备
Cocoa Fundamentals Guide 的中文版
The key to creating a modern Mac application is Cocoa. According to Apple, Cocoa is a set of object-oriented frameworks that provide a runtime environment for Mac OS X applications. As you make your ...
对于刚刚加入这个阵营的开发者来说,Cocoa 像是一个巨大而未知的新世界。Cocoa 开发环境的各种特性、工具、概念、术语、编程接口、甚至是编程语言对他们来说可能都比较生疏。Cocoa 基本原理指南提供了领略Cocoa 技术...
Cocoa入门-使用Objective-C助您轻松体验...Cocoa入门-使用Objective-C包含了Cocoa框架的最新更新,还包括了便利的API速查参考卡,以及在附录中给出很多重要资源,对任何Cocoa开发人员无论初学者还是高手都很重要。
Cocoa编程经典的入门书籍,图文讲解,易于学习
Cocoa下NSTableView的简单使用
Learn Cocoa on the Mac by Jack Nutting, David Mark and Jeff LaMarche The Cocoa frameworks are some of the most powerful frameworks for creating native desktop applications available on any platform ...