Effective Objective-C 2.0 编撰高质量iOS与OS X代码 用“方法调配计数”调试“黑盒方法”

Effective Objective-C 2.0 编写高质量iOS与OS X代码 用“方法调配计数”调试“黑盒方法”
1. 在运行期间,可以向类中新增或替换选择子所对应的方法实现。

2. 使用另一份实现来替换原有的方法实现,这道工序叫“方法调配”(method swizzling),开发者常用调试技术向原有实现中添加新功能。

3. 一般来说,只有调试程序的时候才需要再运行期间修改方法实现,这种做法不宜滥用。


4. 类的方法列表会把选择子的名称映射到相关的方法实现之上,使得“动态消息派发系统”能够据此找到应该调用的方法。
这些方法均以函数指针的形式来表示,这种指针叫IMP,其原型如下:
id (*IMP)(id, SEL, …)

5. 互换两个方法的实现:
void method_exchangeImplementations(Method original,Method swapped)
其中方法实现的获取:
Method class_getInstanceMethod(Class a class, SEL aSelector);


有个有趣的例子:

- (NSString*)eoc_myLowercaseString
{
     NSString *lowercase = [self eoc_myLowercaseString];
     NSLog(@“%@“,lowercase);
     return lowercase;
}

Method originalMethod = class_getInstanceMethod([NSString class], @selector(lowercaseString));
Method swappedMethod = class_getInstanceMethod([NSString class], @selector(roc_myLowercaseString));
method_exchangeImplementations(originalMethod, swappedMethod);

NSString *string = @“ThIs iS tHe STRiNg”;
NSString *lowercaseString = [string lowercaseString];
// Output: this is the string

摘取自:《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》,详细请购买书籍,支持作者及译者。