-
KVC
- 动态取值和设值
- 访问和改变私有变量
- 修改控件的内部属性
KVC
(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过
Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。
这样就可以在运行时动态地访问和修改对象的属性。而不是在编译时确定,这也是iOS
开发中的黑魔法之一。很多高级的iOS开发技巧都是基于KVC实现的.
/*
默认返回YES,表示如果没有找到Set<Key>方法的话,会按照_key,_iskey,
key,iskey的顺序搜索成员,设置成NO就不这样搜索
*/
+ (BOOL)accessInstanceVariablesDirectly;
'setNilValueForKey'
通过kvc赋值的时候,给一个基本数据类型比如int float设置一个nil值,就会调
用这个方法
赋值操作:
1、首先访问该实例类对象的方法列表,按照setKey、_setKey、setIsKey的顺序进行查找访问
2、如果找不到简单的访问器,并且类方法accessInstanceVariablesDirectly
返回YES,则按'_key'、'_isKey'、'key'或'isKey'
顺序来查找类对象中的成员属性列表中的实例变量。如果找到,直接用输入值(或未包
装值)设置变量并完成,没有找到则抛出异常NSUnknownKeyException或者调用setValue:forUndefinedKey
3、accessInstanceVariablesDirectly 是判断关闭或开启实例变量赋值,只有
返回YES,它才能够访问实例变量
取值操作:
1、首先访问该实例类对象的方法列表,按照getKey、key、isKey、_key的顺序进行查找访问
2、如果找不到简单的访问器,并且类方法accessInstanceVariablesDirectly
返回YES,则按'_key'、'_isKey'、'key'或'isKey'
顺序来查找类对象中的成员属性列表中的实例变量。如果找到,直接取值,没有找到则抛出异常NSUnknownKeyException或者调用valueForUndefinedKey
-
拓展
-
setValue forKey
和 setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey
'setValue forKey'
1、KVC编码方法,方法是在NSObject对象中创建的,也就是说所有的oc对象都有这个方法,所以可以用于任何类
2、value可为nil,如果为nil,则自动调用removeObject forkey
3、key必须为NSString
4、取值的时候valueforkey的key如果包含@符号,则取值时会自动把@去掉,程序crash
'setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey'
1、方法属于NSMutabledictionary
2、value不可以为nil,如果为nil,则引发crash;但value可以为[NSNull null],[NSNull null]为一个空对象,并不是nil;
3、key的对象是一个id类型,并不是NSString,只不过我们经常使用NSString而已。
4、取值的时候objectforkey的key如果包含@符号,无影响,可以正常取出该值