zoukankan      html  css  js  c++  java
  • iOS开发NSMutableArray数组越界处理

    #import "NSArray+CrashArray.h"
    #import <objc/runtime.h>
    @implementation NSObject (Until)
    
    - (void)swizzleMethod:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector{
        Class class = [self class];
        Method original = class_getInstanceMethod(class, originalSelector);
        Method Swizzl   = class_getInstanceMethod(class, swizzledSelector);
        
        BOOL didAdd = class_addMethod(class, originalSelector, method_getImplementation(Swizzl), method_getTypeEncoding(Swizzl));
        if (didAdd) {
            class_replaceMethod(class, swizzledSelector, method_getImplementation(original), method_getTypeEncoding(original));
        }else{
            method_exchangeImplementations(original, Swizzl);
        }
    }
    
    @end
    @implementation NSArray (CrashArray)
    
    
    - (id)safeObjectAtIndex:(NSUInteger)index{
        if (index<self.count) {
            return [self safeObjectAtIndex:index];
        }else{
    //#ifdef DEBUG
    //        NSAssert(NO, @"index %lu > count %lu",(unsigned long)index,(unsigned long)self.count);
    //#endif
            return nil;
        }
    }
    - (id)safeObjectAtIndex1:(NSUInteger)index{
        if (index<self.count) {
            return [self safeObjectAtIndex1:index];
        }else{
    //#ifdef DEBUG
    //        NSAssert(NO, @"index %lu > count %lu",(unsigned long)index,(unsigned long)self.count);
    //#endif
            return nil;
        }
    }
    - (id)safeObjectAtIndex2:(NSUInteger)index{
        if (index<self.count) {
            return [self safeObjectAtIndex2:index];
        }else{
    //#ifdef DEBUG
    //        NSAssert(NO, @"index %lu > count %lu",(unsigned long)index,(unsigned long)self.count);
    //#endif
            return nil;
        }
    }
    - (id)safeObjectAtIndex3:(NSUInteger)index{
        if (index<self.count) {
            return [self safeObjectAtIndex3:index];
        }else{
    //#ifdef DEBUG
    //        NSAssert(NO, @"index %lu > count %lu",(unsigned long)index,(unsigned long)self.count);
    //#endif
            return nil;
        }
    }
    
    + (void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            @autoreleasepool {
                [objc_getClass("__NSArrayI") swizzleMethod:@selector(objectAtIndex:) swizzledSelector:@selector(safeObjectAtIndex:)];
                [objc_getClass("__NSArrayI") swizzleMethod:@selector(objectAtIndexedSubscript:) swizzledSelector:@selector(safeObjectAtIndex1:)];
    
                [objc_getClass("__NSArrayM") swizzleMethod:@selector(objectAtIndex:) swizzledSelector:@selector(safeObjectAtIndex2:)];
                [objc_getClass("__NSArrayM") swizzleMethod:@selector(objectAtIndexedSubscript:) swizzledSelector:@selector(safeObjectAtIndex3:)];
            }
        });
    }
    @end
    @implementation NSDictionary(DictinaryCrash)
    
    
    - (void)mutableSetObject:(id)obj forKey:(NSString *)key{
        if (obj && key) {
            [self mutableSetObject:obj forKey:key];
        }
    }
    + (void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            @autoreleasepool{
                [objc_getClass("__NSDictionaryM") swizzleMethod:@selector(setObject:forKey:) swizzledSelector:@selector(mutableSetObject:forKey:)];
            }
        });
    }
    @end
  • 相关阅读:
    赛前一个月
    Barricade---hdu5889(最短路+网络流)
    Tea---hdu5881(规律)
    The Best Path---hdu5883(欧拉路径)
    Cure---hdu5879(打表+找规律)
    Python列表操作
    Zabbix在Docker中的应用和监控
    flannel网络设置
    Volume
    Service资源清单
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9341325.html
Copyright © 2011-2022 走看看