美文网首页
NSArray、NSDictionary 容错处理,防止闪退

NSArray、NSDictionary 容错处理,防止闪退

作者: yellowzhou | 来源:发表于2019-04-23 17:15 被阅读0次

安装使用

pod 'YZExtension', '~> 2.0.0'

github demo

说明

在使用 数组或者字典、字符串时,经常遇到越界或者nil对象引起的闪退,在庞杂的项目中,无法逐个排查。
采用 method swizzling实现 这类异常得到修复,在运行中,不能出现闪退

  • 数组越界取值

    NSMutableArray *list = [NSMutableArray new];
    id object = [list objectAtIndex:1000];
    NSLog(@"%@",object);// 0x600000446e70 [__NSArrayM objectAtIndex:] index 1000 beyond bounds [0 .. 0]
    
    
  • 数组插入nil对象

    NSMutableArray *list = [NSMutableArray new];
    [list insertObject:nil atIndex:0];
    // 0x600000446e70 [__NSArrayM insertObject:atIndex:] object cannot be nil
    [list replaceObjectAtIndex:0 withObject:nil];
    // 0x600000448220 [__NSArrayM replaceObjectAtIndex:withObject:] object cannot be nil
    
    NSArray *array = @[@"aa",text,@"ccc"];
    // 0x6000000031f0 [__NSPlaceholderArray initWithObjects:count:] attempt to insert nil object from objects[1]
    NSLog(@"%@",array);
    /* (
    aa,
    ccc
    ) */
    
    
  • 字典添加nil对象

    NSString *text = nil;
    [list addObject:@{@"name":text}];
    NSDictionary *dic = @{@"name":@"aaa",@"age":text,@"sex":@"man"};
    // 0x600000003230 [__NSPlaceholderDictionary initWithObjects:forKeys:count:] attempt to insert nil object from objects[1]
    NSLog(@"%@",dic); 
    /* {
    name = aaa;
    sex = man;
    } */
    
    
  • 字典设置 key、object 为nil对象

    NSMutableDictionary *dict = [NSMutableDictionary new];
    [dict setObject:nil forKey:@"test"];
    [dict setObject:@"object" forKey:text];
    // 0x60400023a060 [__NSDictionaryM setObject:forKey:] key cannot be nil (object: object)
    // 0x60400023a060 [__NSDictionaryM setObject:forKey:] object cannot be nil (key: test)
    
    
  • NSString 截取越界

    NSString *tmp = @"hello wrold";
    NSString *p = [tmp substringFromIndex:100];
    p = [tmp substringToIndex:300];
    p = [tmp substringWithRange:(NSRange){20,40}];
    

相关文章

网友评论

      本文标题:NSArray、NSDictionary 容错处理,防止闪退

      本文链接:https://www.haomeiwen.com/subject/dskbgqtx.html