iOS setValue和setObject的区别

来源:互联网 发布:linux gzip压缩命令 编辑:程序博客网 时间:2024/06/10 10:21

原文链接:http://blog.csdn.net/bitcser/article/details/54907223

setobject中的key和value可以为除了nil外的任何对象

setValue中的key只能为字符串 value可以为nil也可以为空对象[NSNull null]以及全部对象


网上关于setValue和setObject的区别的文章很多,说的并不准确,首先我们得知道:
setObject:ForKey: 是NSMutableDictionary特有的;setValue:ForKey:是KVC的主要方法

话不多说,上代码:

[objc] view plain copy
  1. - (void)viewDidLoad {  
  2.     [super viewDidLoad];  
  3.     //setObject和setvalue的区别  
  4.     NSMutableDictionary *dic = [NSMutableDictionary dictionary];  
  5.     NSMutableArray *array = [NSMutableArray array];  
  6.     [array insertObject:@"1" atIndex:0];  
  7.     [array insertObject:@"2" atIndex:1];  
  8.       
  9.     [dic setObject:[NSNull null] forKey:@"haha"];  
  10.     [dic setObject:[NSNull null] forKey:array];  
  11.     [dic setObject:[NSNull null] forKey:[NSNull null]];  
  12.     [dic setObject:@1 forKey:@""];  
  13.     [dic setObject:@"" forKey:@1];  
  14.     [dic setObject:nil forKey:@""];  
  15.     [dic setObject:@"" forKey:nil];  
  16.     NSLog(@"dic:%@",dic);  
  17.     //setobject中的key和value可以为除了nil外的任何对象  
  18.     NSLog(@"*****************");  
  19.       
  20.     [dic removeAllObjects];  
  21.     NSLog(@"dic:%@",dic);  
  22.       
  23.     [dic setValue:[NSNull null] forKey:@"haha"];  
  24.     [dic setValue:[NSNull null] forKey:array];  
  25.     [dic setValue:[NSNull null] forKey:[NSNull null]];  
  26.     [dic setValue:@1 forKey:@""];  
  27.     [dic setValue:@"" forKey:@1];  
  28.     [dic setValue:nil forKey:@""];  
  29.     [dic setValue:@"" forKey:nil];  
  30.     [dic setValue:@"" forKey:@"hehe"];  
  31.     [dic setValue:array forKey:@""];  
  32.     NSLog(@"dic2:%@",dic);  
  33.     //setValue中的KEY只能为字符串 value可以为nil也可以为空对象[NSNull null]  
  34.       
  35. }  


程序崩溃,原因就在这几个警告,由代码得出以下结论: