您的位置:首页 > 移动开发 > Objective-C

Objective-C的hook方案(一): Method Swizzling

2015-10-16 16:53 525 查看
在 OS X下创建一个Command Line Tool工程,

用类别的方法继承与NSArray,代码如下:

#import <Foundation/Foundation.h>

@interface NSArray (Swizzle)

- (id)myLastObject;

@end

#import "NSArray+Swizzle.h"

---------------------------------------------------------------------------------------------------

@implementation NSArray (Swizzle)

- (id)myLastObject{

id ret=[self myLastObject];

NSLog(@"********myLastObject ************");

NSLog(@"********myLastObject*************");

return ret;

}

@end

在main.m中写如下代码:-------------------------------------------------------------------------------------

#import <Foundation/Foundation.h>

#import <objc/runtime.h>

#import "NSArray+Swizzle.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Method ori_Metod= class_getInstanceMethod([NSArray class], @selector(lastObject));

Method my_Method=class_getInstanceMethod([NSArray class], @selector(myLastObject));

method_exchangeImplementations(ori_Metod, my_Method);

//IMP--关键字

NSArray *array=@[@"0",@"1",@"2",@"3"];

NSString *string=[array lastObject];

//NSString *string=@"asd";

NSLog(@"TEST RESULT:%@",string);

}

return 0;

}

------------------------------------------------------------------------如下打印结果

2015-10-16 16:26:09.244 TestOneHook[15121:1192366] ********myLastObject ************

2015-10-16 16:26:09.244 TestOneHook[15121:1192366] ********myLastObject*************

2015-10-16 16:26:09.245 TestOneHook[15121:1192366] TEST RESULT: 3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: