KVC探索

作者: 火柴盒环游记 | 来源:发表于2020-04-13 17:18 被阅读0次
    • 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 forKeysetObject:(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如果包含@符号,无影响,可以正常取出该值
    

    相关文章

      网友评论

          本文标题:KVC探索

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