字面量-数组、字典

建议使用字面量语法创建数组和字典。

数组场景一:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);
复制代码

打印结果:

---array1: (
    1,
    2
)
复制代码

即:arrayWithObjects:这种方式创建数组,当遇到值为nil时,数组停止创建,且不会报错,实际使用时,你可能不小心使得想要加入到数组的某个值为空了,结果得到的数组并不是你想要的,甚至你若不知道此方法遇到nil会停止创建,造成迷惑

数组场景二:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);
复制代码

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
    NSLog(@"---%@", [array1 objectAtIndex:3]);
复制代码

报错结果:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 1]'
复制代码

即:无论字面量根据下标获取相应的值还是objectAtIndex: 只要超出数组范围,均会崩溃

数组场景三:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
//    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
//    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);
复制代码

报错结果:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[2]'
复制代码

即: 使用字面量方式创建数组时,若遇到为空的值会崩溃,实际创建数组时,往数组中添加nil往往意味着错误,字面量方式创建数组往往能较快的发现错误所在

字典场景一:

    NSString *testObject;
    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"HH", @"FirstName", @"CC", @"LastName", testObject, @"hi", @"BB", @"hello", nil];
    
//    NSDictionary *dic2 = @{@"FirstName" : @"HH", @"LastName" : @"CC", @"hi" : testObject, @"hello" : @"BB"};
    
    NSLog(@"---dic1: %@", dic1);

//    NSLog(@"---dic2: %@", dic2);
    
    NSLog(@"--%@", dic1[@"hi"]);
    NSLog(@"--%@", [dic1 objectForKey:@"hi"]);

    NSLog(@"--%@", dic1[@"none"]);
    NSLog(@"--%@", [dic1 objectForKey:@"kkk"]);
复制代码

打印结果:

---dic1: {
    FirstName = HH;
    LastName = CC;
}

--(null)
--(null)
--(null)
--(null)
复制代码

即: 与数组类似,dictionaryWithObjectsAndKeys:方式创建字典时,遇到值为nil时,停止创建且不会报错;通过key获取其值,无论字面量获取还是objectForKey:均不会报错; 通过key获取值,即使key为不存在的,仍不会报错

字典场景二:

    NSString *testObject;
//    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"HH", @"FirstName", @"CC", @"LastName", testObject, @"hi", @"BB", @"hello", nil];
    
    NSDictionary *dic2 = @{@"FirstName" : @"HH", @"LastName" : @"CC", @"hi" : testObject, @"hello" : @"BB"};
复制代码

报错结果:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'
复制代码

即:使用字面量方式创建字典时,遇到值为空时,会造成崩溃,这样更容易发现代码逻辑的错误

因此,建议多使用字面量方式(快速创建)创建数组、字典以及NSNumber等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值