需要替换的有
-[__NSArray0 objectAtIndex:]
-[__NSSingleObjectArrayI objectAtIndex:]
-[__NSArrayI objectAtIndexedSubscript:]
-[__NSArrayI objectAtIndex:]
-[__NSArrayM objectAtIndexedSubscript:]
-[__NSArrayM objectAtIndex:]
替换后线上会发生崩溃,崩溃日志: https://blog.csdn.net/qq_15509071/article/details/88603086
防止数组越界还是新写个方法吧,取值的时候用这个:
防止数组越界还是新写个方法吧,取值的时候用这个:
.h
#import <Foundation/Foundation.h>
@interface NSArray (yyy)
//
//防止越界崩溃的数组取值方法
//
- (id)objectAtIndexWithoutCrossCrash:(NSUInteger)index;
@end
.m
#import "NSArray+yyy.h"
#import <UIKit/UIKit.h>
@implementation NSArray(yyy)
- (id)objectAtIndexWithoutCrossCrash:(NSUInteger)index{
if (index >= self.count || index < 0) {
NSLog(@"NSArray数组越界");
return nil;
}
return [self objectAtIndex:index];
}
@end
实验过程
{
NSArray *dd = @[];
NSString *nnn = dd[1]; // -[__NSArray0 objectAtIndex:]
NSString *nnn2 = [dd objectAtIndex:1]; // -[__NSArray0 objectAtIndex:]
}
{
NSArray *dd = [NSArray array];
NSString *nnn = dd[1]; // -[__NSArray0 objectAtIndex:]
NSString *nnn2 = [dd objectAtIndex:1]; // -[__NSArray0 objectAtIndex:]
}
{
NSArray *dd = [[NSArray alloc]init];
NSString *nnn = dd[1]; // -[__NSArray0 objectAtIndex:]
NSString *nnn2 = [dd objectAtIndex:1]; // -[__NSArray0 objectAtIndex:]
}
{
NSArray *dd = [NSArray new];
NSString *nnn = dd[1]; // -[__NSArray0 objectAtIndex:]
NSString *nnn2 = [dd objectAtIndex:1]; // -[__NSArray0 objectAtIndex:]
}
{
NSArray *arr = @[@""];
NSString *str = arr[1];//-[__NSSingleObjectArrayI objectAtIndex:]
NSString *str2 = [arr objectAtIndex:1];//-[__NSSingleObjectArrayI objectAtIndex:]
}
{
NSArray *arr = [[NSArray alloc]initWithObjects:@"d", nil];
NSString *str = arr[1];//-[__NSSingleObjectArrayI objectAtIndex:]
NSString *str2 = [arr objectAtIndex:1];//-[__NSSingleObjectArrayI objectAtIndex:]
}
{
NSArray *arr = @[@"",@"j"];
NSString *str = arr[4];//-[__NSArrayI objectAtIndexedSubscript:]:
NSString *str2 = [arr objectAtIndex:4];//--[__NSArrayI objectAtIndex:]:
}
{
NSArray *arr = @[@"",@"j",@"2",@"4",@"5"];
NSString *str = arr[14];//-[__NSArrayI objectAtIndexedSubscript:]:
NSString *str2 = [arr objectAtIndex:14];//--[__NSArrayI objectAtIndex:]:
}
{
NSMutableArray *mutarr = @[].mutableCopy;
NSString *str = mutarr[1];//-[__NSArrayM objectAtIndexedSubscript:]:
NSString *str2 = [mutarr objectAtIndex:2];//-[__NSArrayM objectAtIndex:]:
}
{
NSMutableArray *mutarr = @[@""].mutableCopy;
NSString *str = mutarr[1];//-[__NSArrayM objectAtIndexedSubscript:]:
NSString *str2 = [mutarr objectAtIndex:2];//-[__NSArrayM objectAtIndex:]:
}
{
NSMutableArray *mutarr = @[@"",@"d",@"2",@"4",].mutableCopy;
NSString *str = mutarr[14];//-[__NSArrayM objectAtIndexedSubscript:]:
NSString *str2 = [mutarr objectAtIndex:24];//-[__NSArrayM objectAtIndex:]:
}