1、创建一个类Person
声明一个方法:- (void)talk;
2、在vc中实例化person对象 并实现:- (void)talk2;
3、实现replace函数可以将person调用的talk替换成talk2
代码如下:
- (void)replace
{
Person *man = [[Person alloc] init];
man.name = @"成龙";
SEL original = @selector(talk);
SEL replacement = @selector(talk2);
Method a = class_getInstanceMethod([Person class], original);
Method b = class_getInstanceMethod([self class], replacement);
if (class_addMethod([Person class], original, method_getImplementation(b), method_getTypeEncoding(b)))
{
class_replaceMethod([Person class], replacement, method_getImplementation(a), method_getTypeEncoding(a));
}
else
{
method_exchangeImplementations(a, b);
}
[man talk];
}
当man调用talk时实际上执行的是vc中得talk2函数