利用运行时函数runtime交换2个方法的实现数组
+(void)load //第一次载入内存时候实现load方法 { // class_getInstanceMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>) 对象方法 // class_getClassMethod(<#__unsafe_unretained Class cls#>, <#SEL name#>) 类方法 Method method1 = class_getClassMethod(self, @selector(imageNamed:)); Method method2 = class_getClassMethod(self, @selector(imageWithName:)); method_exchangeImplementations(method1, method2); }
1.保证NSMutableArray addobject对象不为空函数
+(void)load { //直接[NSMutableArray class] 底层没法识别 Method method1 = class_getClassMethod(NSClassFromString(@"__NSArrayM"), @selector(hm_addObject:)); Method method2 = class_getClassMethod(NSClassFromString(@"__NSArrayM"), @selector(addObject:)); method_exchangeImplementations(method1, method2); } +(void)wt_addObject:(id)object { if (object != nil) { [self wt_addObject:object]; } }
2.防止数组越界code
+(void)load { Method method1 = class_getClassMethod(NSClassFromString(@"__NSArrayI"), @selector(wt_objectAtIndex:)); Method method2 = class_getClassMethod(NSClassFromString(@"__NSArrayI"), @selector(objectAtIndex:)); method_exchangeImplementations(method1, method2); } +(void)wt_objectAtIndex:(NSUInteger)index { if (index < self.count) { return [self wt_objectAtIndex:index]; }else{ return nil; } }