22 键值编码KVC
KVC全称key valued coding 键值编码
提到KVC,就不能不提反射机制,反射机制就是在运行状态中,对于任意一个类,都能够调用他的所有属性和方法,对于任意一个对象,都能够调用他的任意一个方法和属性,java和C#都有,ObjC也有,所以你根本不必进行任何操作就可以进行属性的动态读写,这就是KVC.KVC的操作方法基本上都由NSKeyValueCoding提供,而他是NSObject的类别,也就是说所以的对象都支持KVC操作。
使用KVC间接修改对象属性时,系统会自动判断对象属性的类型,并完成转换。
KVC可以访问成员变量,无论是否提供get,set方法,无论可见性咋样,是否有readonly修饰。
KVC的主要作用dict和model之间的互转
字典转模型 [self setValuesForKeysWithDictionary:dict];
模型转字典 [p dictionaryWithValuesForKeys:array];
使用KVC计算属性 举例:[p valueForKeyPath:@"books.@sum.price"];
@avg:平均值
@count:总数
@max:最大
@min:最小
@sum:总数
23 键值观察KVO
KVC,KVO原理剖析
24 协议
概念:定义了一个接口,其他类负责实现这个接口,如果你的类实现了一个协议的方法时,则说明该类遵循此协议
非正式协议:NSObject的类别
协议的修饰符:@required 表示这个方法是必须实现的,@optional,这个表示这个方法是可以实现也可以不实现的,
conformsToProtocol方法--监测一个方法是否遵循某个协议
协议是无类型的,一个协议可以被多个类使用,一个类可以遵循多个协议
25 委托
- 代理又叫委托,是一种设计模式,代理是对象与对象之间的通讯,代理解除了对象之间的耦合性。
- 代理可以理解为JAVA重的回调监听机制。
委托步骤
定义协议
创建委托对象,委托对象必须实现委托协议
实现协议方法
26 NSNotification、Block、代理、和KVO的区别。
代理是一种回调机制,且是一对一的关系,通知是一对多。
Delegate比NSNotification效率高
代理和Block一般是一对一的通信
代理需要定义协议方法,代理对象需要实现协议方法,并且需要建立代理关系
Block比较简洁,不需要定义繁琐的协议方法,如果通信事件比较多的话,建议使用代理
27 当我们调用一个静态方法时,需要对对象进行release吗??
- 不需要,静态方法(类方法)创建一个对象时,对象已经被放入自动释放池中
28 static self super关键字的作用
29 iOS数据持久化有几种??
遵循NSCodeing协议,需要实现encodeWithCoder和initWithCoder方法,如果是子类继承父类的话,需要实现父类的归档和解档方法 如果需要归档的属性过多,可以使用runtime来进行归档
30 CoreData
CoreData介绍
CoreData是面向对象的API,CoreData是iOS中非常重要的一项技术,几乎在所有编写的程序中,CoraData也作为数据存储的基础。
他是苹果官方提供的一套框架,用来解决与对象声明周期管理,对象关系管理和持久化等问题
他提供的是对象-关系映射功能,可以将OC对象转换成数据,保存到SQL中,然后将保存后的数据还原成OC对象。
CoreData的特征
通过CoreData管理应用程序的数据模型,可以极大程度减少需要编写的代码数量。
将对象数据存储在SQLite数据库已获得性能优化。
提供NSFetchResultsController类用于管理表视图的数据,即将Core Data的持久化存储在表视图中,并对这些数据进行管理:增删查改。
管理undo/redo操纵;
- 检查托管对象的属性值是否正确。
- CoreData的6成员对象
NSManageObject:被管理的数据记录Managed Object Model是描述应用程序的数据模型,这个模型包含实体(Entity)、特性(Property)、读取请求(Fetch Request)等。
NSManageObjectContext:管理对象上下文,持久性存储模型对象,参与数据对象进行各种操作的全过程,并监测数据对象的变化,以提供对undo/redo的支持及更新绑定到数据的UI。
NSPersistentStoreCoordinator:连接数据库的Persistent Store Coordinator相当于数据文件管理器,处理底层的对数据文件的读取和写入,一般我们与这个没有交集。
NSManagedObjectModel:被管理的数据模型、数据结构。
NSFetchRequest:数据请求;
- NSEntityDescription:表格实体结构,还需知道.xcdatamodel文件编译后为.momd或者.mom文件。
CoreData的功能
对于KVC和KVO完整且自动化的支持,除了为属性整合KVO和KVC访问方法外,还整合了适当的集合访问方法来处理多值关系;
自动验证属性(property)值;
支持跟踪修改和撤销操作;
关系维护,Core Data管理数据的关系传播,包括维护对象间的一致性;
在内存上和界面上分组、过滤、组织数据;
自动支持对象存储在外部数据仓库的功能;
创建复杂请求:无需动手写SQL语句,在获取请求(fetch request)中关联NSPredicate。NSPreadicate支持基本功能、相关子查询和其他高级的SQL特性。它支持正确的Unicode编码、区域感知查询、排序和正则表达式;
延迟操作:Core Data使用懒加载(lazy loading)方式减少内存负载,还支持部分实体化延迟加载和复制对象的数据共享机制;
合并策略:Core Data内置版本跟踪和乐观锁(optimistic locking)来支持多用户写入冲突的解决,其中,乐观锁就是对数据冲突进行检测,若冲突就返回冲突的信息;
数据迁移:Core Data的Schema Migration工具可以简化应对数据库结构变化的任务,在某些情况允许你执行高效率的数据库原地迁移工作;
- 可选择针对程序C
|