1、列出需要去掉前缀的方法所在的类
+ (NSArray *)classesToSwizzle{ return @[ [NSManagedObject class],
[NSManagedObjectContext class],
[NSManagedObjectModel class],
[NSPersistentStore class],
[NSPersistentStoreCoordinator class] ];}
复制代码
2、hook每个类的resolveClassMethod:和resolveInstanceMethod:方法
3、实现自定义MR_resolveClassMethod:和MR_resolveInstanceMethod:方法,在方法中对于所调用的没有前缀的方法进行添加
static BOOL MRAddShorthandMethodForPrefixedInstanceMethod(Class objectClass, SEL originalSelector, NSString *prefix){ NSString *originalSelectorString = NSStringFromSelector(originalSelector); if ([originalSelectorString hasPrefix:prefix] == NO && ([originalSelectorString hasPrefix:@"_"] || [originalSelectorString hasPrefix:@"init"])) { NSString *prefixedSelector = [prefix stringByAppendingString:originalSelectorString]; Method existingMethod = class_getInstanceMethod(objectClass, NSSelectorFromString(prefixedSelector)); if (existingMethod) { BOOL methodWasAdded = class_addMethod(objectClass, originalSelector, method_getImplementation(existingMethod), method_getTypeEncoding(existingMethod)); return methodWasAdded; } } return NO;}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END