SetValue:forKey和SetObject:forKey的区别
来源:互联网 发布:麻将软件 编辑:程序博客网 时间:2024/05/18 22:47
一、NSUserDefauts中2者区别
SetObject:forKey用于将键值对存到NSDefaults中,而SetValue:forKey本质是KVC,但是使用该方法也可以将指定键值对存入NSDefaults中。因此NSDefault应该复写了该方法。如果SetValue:forKey的key不是NSUserDefaults属性,那么作用和SetObject:forKey相同;如果key是NSDefaults属性,猜测作用应该是修改属性值。(http://stackoverflow.com/questions/26200066/nsuserdefaults-setvalue-and-objectforkey)。
试验如下:
-(void)defaultsTest
{
NSUserDefaults* defualts = [NSUserDefaultsstandardUserDefaults];
NSLog(@"original--->%@",defualts.volatileDomainNames);
//使用setValue存入
[defualts setValue:@"test"forKey:@"TEST"];
NSLog(@"test--->%@",[defualtsvalueForKey:@"TEST"]);
//key是属性名
[defualts setValue:@[@"a",@"b"]forKey:@"volatileDomainNames"];
NSLog(@"modified info1--->%@",[defualtsvalueForKey:@"volatileDomainNames"]);
NSLog(@"modified info2--->%@",defualts.volatileDomainNames);
}
打印结果:
2016-01-07 11:49:38.233 NSDefaultsTest[1097:48401] original--->(
NSRegistrationDomain,
NSArgumentDomain
)
2016-01-07 11:49:38.236 NSDefaultsTest[1097:48401] test--->test
2016-01-07 11:49:38.236 NSDefaultsTest[1097:48401] modified info1--->(
a,
b
)
2016-01-07 11:49:38.236 NSDefaultsTest[1097:48401] modified info2--->(
NSRegistrationDomain,
NSArgumentDomain
)
通过上面打印结果可以看出
1.setValue:forKey的作用和setObject:forKey一样,可以用来存值。
2.setValue:forKey并不会触发KVC的作用从而改变NSUserDefaults的属性。而是会创建一个键和属性名相同的键值对,然后存到NSUserDefaults中。
总结:虽然实验结论是2者存值时,作用基本相同,但是不建议使用setValue:forKey来存值,而是使用正规方法:setObject:forKey
二、NSMutableDictionary
在NSMutableDictionary中二者功能也基本相同
-(void)dictionaryTest
{
NSMutableDictionary* dic = [NSMutableDictionarydictionary];
[dic setObject:@"test"forKey:@"TEST"];
[dic setValue:@"test2"forKey:@"TEST2"];
NSLog(@"description--->%@",dic);
}
打印结果:2016-01-07 14:07:56.914 NSDefaultsTest[1148:61587] description--->{
TEST = test;
}
2016-01-07 14:07:56.915 NSDefaultsTest[1148:61587] description--->{
TEST = test;
TEST2 = test2;
}
当然还是有区别的1. 在NSMutableDictionary的setValue: forKey:的定义中
/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObject:forKey:.
*/
- (void)setValue:(id)value forKey:(NSString *)key;
@end
上面注释说的很清楚,发送setObject:forKey 给接收者,也就是调用setObject:forKey方法除非value为nil的时候,调用方法removeObject:forKey
2.setObject:forKey:定义:
@interface NSMutableDictionary<KeyType, ObjectType> :NSDictionary<KeyType, ObjectType>
- (void)removeObjectForKey:(KeyType)aKey;
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;
因此key可以是任何类型,而setValue中的key只能是String
总结:
1.setObject:forkey:中value是不能够为nil的,不然会报错。
setValue:forKey:中value能够为nil,但是当value为nil的时候,会自动调用removeObject:forKey方法
2.setValue:forKey:中key的参数只能够是NSString类型,而setObject:forKey:的可以是任何类型
- setValue forKey和setObject forKey的区别
- setValue: forKey 和 setObject: forkey的区别
- SetValue:forKey和SetObject:forKey的区别
- setValue: forKey 和 setObject: forKey 的区别
- iOS -setValue:forKey:和-setObject: forKey区别
- setValue:forKey:与setObject:forKey:的区别
- iOS开发66-setValue:forKey:和 setObject:forKey:的区别
- setValue forKey 和 setObject forKey
- 字典方法setValue:ForKey setObject:ForKey的区别
- setObject:ForKey:与setValue:ForKey:的区别与联系
- setValue:forKey与setObject:forKey的差异
- setValue:forKey与setObject:forKey的差异
- setValue:forKey与setObject:forKey的差异
- setValue: forkey与 setObject区别
- iOS开发中setObject:ForKey和setValue:ForKey的用法和区别
- kvc和字典在创建键值对时的相同与区别(setValue forKey )(setObject forKey)
- setValue:forKey:与setObject:forKey:
- setObject:ForKey:与setValue:ForKey:存值区别与联系
- django web开发指南-实例 1: Photo Gallery运行起来修改点。
- ubuntu server 14.04 安装图形界面
- Android使用Xutils在Entity填充数据
- libssh2 1.6版更改编译通过(OpenSSL 1.0.2d)
- 关于python3调用C/C++的方法(ctypes)
- SetValue:forKey和SetObject:forKey的区别
- GPU编程--开山篇
- WIN10 Eclipse LUNA的JDK配置
- 多项目共同维护
- Lee天Code : 111. Minimum Depth of Binary Tree
- 安装SQLSERVER2005提示事务管理器不可用
- iOS应用程序的生命周期
- eclipse相关知识点
- log4net配置