iOS核心笔记—KVC机制

1、KVC(键值编码)

【1】、什么是KVC?

  • KVC俗称键值编码,就是可以通过一系列方法(KVC方法)根据对象的属性名称作为key值,传入具体的value值赋值给对象的属性。

【2】、KVC的作用

  • 通常,当字典中的key与对象的属性名称完全相同时,这是我们能够通过使用KVC将字典中的value值设置给对象的属性;不过,切记:对象中的属性只能比字典中的key多而不能少,一旦字典中的key在对象中找不到与之对应的属性,程序崩溃;这也是KVC一个最致命的缺点。

【3】、KVC三种形式

  • key中不包含路径:
    • 使用setValue:forKey:方法给对象属性赋值: 
    • 使用valueForKey方法取出对象的属性值: 
    • 数组使用valueForKey方法且key中不包含路径,将会抽取数组中所有对象的对应属性组成一个新的数组返回: 
  • key中包含路径:
    • 使用setValue:forKeyPath:方法给对象属性赋值: 
    • 使用valueForKeyPath方法取出对象的属性值: 
    • 同理,数组使用valueForKeyPath方法,也能够将数组中对象的key属性抽取出来组成一个新的数组;
    • 数组使用valueForKeyPath方法,在key中添加@符号 + 要执行的计算操作;可以实现指定的计算功能: 
  • 字典使用KVC:
    • 字典使用setValuesForKeysWithDictonary:方法,将字典中key对应的value值设置到对象的对应属性;不过切记字典中的key在对象中一定要有与之对应的属性(即:对象中的属性只能多于字典中的key),如果字典中的key在对象中找不到与之对应的属性,程序崩溃。 
    • 对象使用dictionaryWithValuesForKeys:方法,通过传入对象的属性数组,返回字典;字典中将对象的属性以键值对的形式存放。 

2、使用KVC注意事项:

  • 使用KVC不包含路径方式,给对象属性赋值、或者根据key从对象中取值时,key中一定不能包含路径;因为,不带Path的KVC方法默认将传入的字符串当成一个完整的key,并不能识别其中的路径(即:key中的.符号);如果传入路径程序崩溃。 
  • 数组使用KVC不包含路径方式,只能执行计算数组长度的功能;不能执行其他操作,否则,程序将会崩溃。
    • 执行计算数组的长度功能: 
    • 执行计算长度功能并在key中添加属性名时,程序崩溃: 
    • 执行求和功能,程序崩溃: 
  • 数组使用KVC的forKeyPath方法计算长度时,传入对象的属性名无效;返回整个数组的长度: 

总结:

  • KVC使用forKey类型方法时,key中不能传入路径;因为,forKey类型方法只会将传入的字符串当成整个key;在对象中查找属性时没有找到与key同名的属性时程序报错。
  • 数组使用forKey类型的方法时,只能执行计算长度的功能;即:array.count,不过,在key中必须使用@符号,表明这是在执行计算操作。
  • KVC使用forKeyPath类型方法时,运行时系统能够根据key中的路径找到与之对应的对象的属性;进行赋值、取值操作。
  • KVC使用forKeyPath类型方法时,能够在将要执行的计算操作结合@符号添加到key中;执行计算功能。
  • 字典使用KVC时,能够根据字典中的键对应的值设置到对象对应的属性中;也能根据对象属性数组,将对象的属性打包到字典中使用。
时间: 2024-10-14 13:33:30

iOS核心笔记—KVC机制的相关文章

iOS核心笔记—KVO机制

1.KVO KVO简介:Key Value Observing,通过Key键观察对象的对应Key键的属性值Value是否发生改变. KVO的作用: 当前对象想监听另一个对象的某个属性是否发生变化. KVO使用步骤:①给对象的某个属性添加监听器:②监听器实现监听方法:③对象销毁前一定要移除监听器. 当前对象监听另一个对象的某个属性: [person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionN

iOS核心笔记——UICollectionView-辅助视图

iOS核心笔记--UICollectionView-辅助视图 1.UICollectionView辅助视图: ?了解:UICollectionView中的头部视图.尾部视图都是使用注册机制 + 重用机制,提高程序的执行效率,其头尾部视图类型均为:UICollectionReusableView.注册辅助视图时使用字符串区分注册的视图为头部还是尾部视图,其区分字符串为:UICollectionElementKindSectionHeader(头部视图).UICollectionElementKin

iOS核心笔记——UICollectionView-布局对象

iOS核心笔记--UICollectionView-布局对象 1.UICollectionView布局对象: 1-1.UICollectionViewLayout: ?了解:1.UICollectionViewLayout没有itemSize属性,而collectionView的cell的大小不能为0或者小于0:所以,通常collectionView使用其子类UICollectionViewFlowLayout布局cell. ?了解:2.UICollectionViewLayout中声明了布局可

iOS核心笔记——iOS通知机制

1.iOS通知机制: 1-1.iOS通知发布者.通知中心.监听器之间的关系: 如下图所示: 2.通知(NSNotification)简介: 3.通知中心(NSNotificationCenter) 3-1.每个应用程序只有一个通知中心对象(单例对象): 4.发布通知: 4-1.对象在自己需要的某个时候使用通知类(NSNotification)创建通知对象后让通知中心帮忙发布通知: 1.可以在对象A需要使用通知的某个位置,直接让通知中心帮忙发送的时候将通知中的一系列信息通过通知中心提供的方法创建通

iOS核心笔记——网络编程-网络安全

1.数据安全: 1.01 攻城利器:Charles(公司中一般都使用该工具来抓包,并做网络测试)2.注意:Charles在使用中的乱码问题,可以显示包内容,然后打开info.plist文件,找到java目录下面的VMOptions,在后面添加一项:-Dfile.encoding=UTF-83.02 数据安全的原则4. 1)在网络上"不允许"传输用户隐私数据的"明文"5. 2.)在本地"不允许"保存用户隐私数据的"明文"6.03

iOS核心笔记—MapKit框架-导航

1.导航简介: ?了解:导航,简单来说,就是根据用户指定的位置,进行路线规划:然后根据用户在行走过程中,实时的给出指引提示. 1-1.iOS导航实现方案: 方案 详细说明 方案一 将需要导航的位置传递给系统的地图APP进行导航 方案二 发送网络请求到Apple服务器/公司服务器获取导航数据,然后,手动绘制导航路线 方案三 利用第三方SDK实现导航功能(百度地图) ?说明:通常如果需要手动绘制导航路线,都是向Apple服务器发送请求.获取导航信息:此处,只对方案一.方案二做详细介绍,方案三将单独说

iOS核心笔记——多线程-GCD

1.GCD简介: ?了解:GCD全称为"Grand Central Dispatch",纯C语言,GCD提供了非常多功能强大的函数:GCD中所有的函数都包含于Libdispatch库中. 1-1.使用GCD的优势: ?了解:1.GCD是苹果公司为多核的并行运算提出的解决方案: ?了解:2.GCD会自动利用更多的CPU内核(例如:双核.四核): ?了解:3.GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程). 1-2.GCD两大核心概念: 名称 作用: 任务 执行什么操作 队

iOS核心笔记——CALayer-基本使用

1.CALayer简单使用: ※了解: 通过操作CALayer对象,可以很方便的调整UIView的一些界面属性,例如:阴影.圆角大小.边框宽度--等:在iOS 7.0以前使用CALayer需要手动导入QuartzCore框架. 2.通过CALayer修改UIView的界面属性: 1.在storyboard中拖入UIView,并设置相关属性: 如下图所示: 2.设置阴影: 1. // 1. 设置阴影颜色2. self.blueView.layer.shadowColor = [UIColor bl

iOS核心笔记——多线程-基本知识

1.基本概念: 1-1.进程: 定义:进程是指系统中正在运行的应用程序. 了解:每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间里. 1-2.线程: 一个进程要想执行任务,必须要有一条线程(即:每一个进程至少拥有一条线程,这条线程便是主线程). 一个进程中的所有任务都是在线程中执行. 线程是进程的基本执行单元. 1-3.线程的串行: 线程中所有的任务都是串行执行的,即:如果要在1个线程中执行多个任务时,多个任务只能按顺序执行:且同一时刻,1个线程只能执行1个任务. 1-4.进程与线