@interface NSObject (Exchange)
-(void)swizzleMethod:(SEL)OldSel withNewMethod:(SEL)NewSel;
@end#import
"NSObject+Exchange.h"
@implementation NSObject (Exchange)
-(void)swizzleMethod:(SEL)OldSel withNewMethod:(SEL)NewSel
{
Class selfclass=[self class];
Method oldMethod=class_getInstanceMethod(selfclass, OldSel);
Method newMethod=class_getInstanceMethod(selfclass, NewSel);
BOOL addselector=class_addMethod(selfclass, OldSel, class_getMethodImplementation(selfclass, NewSel), method_getTypeEncoding(newMethod));
if (addselector) {
NSLog(@"加方法成功");
class_replaceMethod(selfclass, NewSel, class_getMethodImplementation(selfclass, OldSel), method_getTypeEncoding(oldMethod));
}else {
method_exchangeImplementations(oldMethod, newMethod);
} }
#import "NSObject+Exchange.h"
@interface NSArray (CheckIndex)
@end
#import "NSArray+CheckIndex.h"
@implementation NSArray (CheckIndex)
+(void)load{
SEL oldSel=@selector(objectAtIndex:);
SEL newSel=@selector(emptycheckObjectAtIndex:);
SEL newSel1=@selector(arrayIcheckObjectAtIndex:);
SEL newSel2=@selector(arrayMcheckObjectAtIndex:);
[objc_getClass("__NSArray0") swizzleMethod:oldSel withNewMethod:newSel];
[objc_getClass("__NSArrayI") swizzleMethod:oldSel withNewMethod:newSel1];
[objc_getClass("__NSArrayM") swizzleMethod:oldSel withNewMethod:newSel2];
[objc_getClass("__NSSingleObjectArrayI") swizzleMethod:@selector(objectAtIndex:) swizzledSelector:@selector(singleObjectIndex:)];
}
-(id)emptycheckObjectAtIndex:(NSInteger)index{
if (self.count>index) {
return [self emptycheckObjectAtIndex:index]; }else{ return nil;
}
}
-(id)arrayIcheckObjectAtIndex:(NSUInteger)index{
NSLog(@"检查");
if (self.count>index) { return [self arrayIcheckObjectAtIndex:index];
}else{
return nil;
}}
-(id)arrayMcheckObjectAtIndex:(NSUInteger)index{
NSLog(@"检查"); if (self.count>index) {
return [self arrayMcheckObjectAtIndex:index];
}else{
return nil;
}
}
-(id)singleObjectIndex:(NSInteger )index
{
if (index >= self.count || index < 0) {
return nil;
}
return [self singleObjectIndex:index];
}