iOS设计模式札记1-基础模式
前言
设计模式为那些重复出现的编程问题提供了高质量的实用解决方案。它们是一个工具箱,包含了经过多年优化后格式更为简洁的可重用解决方案和最佳做法。核心就是重用。
设计模式包含四要素:
- 模式名称
- 模式动机或作用
- 详细描述
- 成果
设计指导原则
- 低耦合。减少类、对象间的依赖。
- 适应变化。提供可更改的机制来实现新需求。
- 强调的是接口而不是实现。协议。
- 找到最佳的粒度。某些问题通过一些只涉及几个类的小型模式而得到最佳的解决,而另一些问题则需要通过重用为中心的模式来解决。
- 使用复合更优于继承。继承导致其与父类造成关系非常密切的耦合,能避免尽量避免。
基础模式
MVC - UIViewController
模板方法 - drawRect:
动态创建 -
类别 - category
枚举器 - 快速枚举 enumObjects
访问器 - KVC (key value coding)
KVC
|
|
KVC [XXX setValue:属性值 forKey:属性名] 的底层执行机制如下:
- 优先考虑调用 『set属性名: 属性值』方法,调用属性的 setter方法;
- 如果没有setter方法,KVC会搜索该类的 属性名 成员变量,无论该成员变量在类的接口部分定义还是在实现部分定义,也无论采用哪种访问控制修饰符,如果存在,KVC代码底层就是对该 属性名 成员变量进行赋值;
- 如果没有,KVC会搜索该类名称为 属性名 的成员变量, 同样无论其定义位置和修饰符;
- 如果仍没有,执行该对象的
setValue: forUndefinedKey:
方法,默认该方法引发一个异常,导致程序结束。
valueForKey:与之类似,也为这四个过程,如果都没有,会执行 valueForUndefinedkey:(id) key
方法,默认也会引发一个异常。
还可以用如 [order setValue:@"book" forKeyPath:@"item.name"];
这种Key路径为 order的item成员变量的成员name赋值。可以组装keyPath,具有很高的灵活性。
复制 - NSCopying/NSMutableCopying
归档和解档 - NSArchiver/NSUnArchiver
执行选择器和延迟执行 - performSelector: withDelay:
匿名类型和异类容器
通过解耦来变得更强大的模式
单例 - manager
通知 - Notification
代理/委托 - delegate
响应者链 - respone chain
层次结构 - View Hierarchy
联合存储 - reference count / KVC (key value coding)
KVC
|
|