有一篇比较详细的文章说这三个,这里总结下https://www.aopod.com/2017/02/24/class-clusters/
想写个类别把系统的NSArray中的方法替换掉,最多的是这么写
Class myClass = NSClassFromString(@"__NSArrayI");
Method safeMethod=class_getInstanceMethod (self, @selector(objectAtSafeIndexI:));
Method unsafeMethod=class_getInstanceMethod (myClass, @selector(objectAtIndex:));
method_exchangeImplementations(unsafeMethod, safeMethod);
-(id)safeObjectAtIndex:(NSUInteger)index{
NSLog(@"safeObjectAtIndex-->>%@--->>%@",@(index),@(self.count));
if (index > (self.count - 1)) {
// NSAssert(NO, @"beyond the boundary");
return nil;
}
else{
return [self safeObjectA