More Related Content
Similar to iOS 设计模式简介 (20)
iOS 设计模式简介
- 7. 模型-视图-控制器( MVC )
•
•
•
•
一个相当老的设计模式( Smalltalk 早期)
高级别的模式,关注全局架构
复合的模式(由几个更加基本的模式组成)
面向对象的程序采用 MVC 的好处
o
对象更具重用性
o
接口定义更加良好
o
更加容易扩展
o
Cocoa 中很多技术和架构都基于 MVC ,要求定制对
象充当 MVC 定义的某种角色
- 10. 复合的设计模式
在原来的( Smalltalk )概念上, MVC 是由合成
( Composite )、策略( Strategy )和观察者
( Observer )模式组成的。
• 合成模式: V 是多个嵌套视图的集合
• 策略模式:一个 C 负责一或多个 V 的策略
• 观察者模式: M 将状态变化通知其他感兴趣的对
象(通常是 V )
- 22. 代理 / 委托 (delegation)
把类的接口变换为客户端要求的另一种接口
程序中的
其他类
Cocoa Touch
框架中的类
委托协议
- 30. 2. KVO (Key-Value Observing)
•
•
某个对象中的特定属性发生了改变,别的对
// 注册
-(void)addObserver:(NSObject *)anObserver forKeyPath:
象可以获得通知 options:
(NSString *)keyPath
(NSKeyValueObservingOptions)options context:
Cocoa 框架功能,基于 KVC (Key-value
(void*)context
coding)
// 实现响应
•
-(void)observeValueForKeyPath:(NSString *)keyPath
KVO/KVC 实现机理分析
ofObject:(id)object change:(NSDictionary *)change
context:(void *)context
- 34. 实现
•
程序启动的时候,会调用 UIApplicationMain 方法,实
例化一个 UIApplication 对象。之后在程序中的任意地
方调用 sharedApplication 方法都将返回一个与当前应
用程序相关的 UIApplication 实例( UIApplicationMain
方法中创建的 UIApplication 单例)
iOS SDK 中许多类使用了单例,如
+ (AFIHClient *)sharedClient:(NSString *)path
{
static AFIHClient *_sharedClient = nil;
static dispatch_once_t onceToken; // 进程锁
dispatch_once(&onceToken, ^{
// 最多调用一次
_sharedClient = [[AFIHClient alloc] // 第一次会调用 init
initWithBaseURL:[NSURL URLWithString:KAFUrl]];
});
... ....
return _sharedClient;
}
UIApplication, NSUserDefaults,
NSNotificationCenter...
•
『趣读』和『 Iamhere 』的网络通信方法
Editor's Notes
- 特定环境是指一个经常出现的环境,是设计模式应用的地方;问题是指在这个环境以及和这个环境与生俱来的约束下您希望达成的目标;而解决方案则是您关心的:一个可以在这个环境下达成目标、解决约束的一般性设计。
- Cocoa是苹果公司为Mac OS X所创建的原生面向对象的编程环境。Cocoa 应用程序一般在苹果公司的开发工具Xcode(前身为Project Builder)和Interface Builder上用Objective-C写成。Cocoa 是从1980年代由 NeXT 开发的编程环境 NeXTSTEP 和 OPENSTEP 演变而来,这点可由其类型之名皆以 NS 前缀(代表NeXTSTEP)看出端倪。
- 适配器:将一个类接口转化为客户代码需要的另一个接口。使原本由于兼容性而不能协同工作的类可以工作在一起,消除耦合性。
协议:由于两个对象的接口不兼容而导致交流困难,就可以定义一个协议,它本质上是一系列和类不相关联的方法声明。这样,其它对象的类就可以正式采纳该协议,并通过实现协议中的全部方法来“遵循”该协议。结果,客户对象就可以通过协议接口向其它对象发送消息。
代理:协议是一种编程语言级别的特性,提供了一个很方便的实现代理模式的机会。
- 仲裁控制器通常可以在IB中直接拖出,进行配置。改变V时新的值会通过它自动传递给M,M的属性值变化时又会传递给V
协调控制器提供如响应委托和对通告进行观察、响应动作、管理生命周期、建立对象间连接等服务
- 通过绑定技术,很容易创建一个Cocoa的MVC程序,让V直接观察M。V和M应该是程序中最具可重用性的对象。最好让M和V彼此分离,增加可重用性。
- 大多数Cocoa应用程序中,M的变化是通过C传递给V的。尽管多用了2个基本设计模式(命令、仲裁者),这种通讯机制显得清晰很多。
- 1. 用户操作,视图组合的某个层次接收,画布(M)将触摸消息传递给C;2. C收到消息和相关信息,应用策略变更M的状态;3. M通知观察者;4. C像个协调者,将变更了的数据从M传递给V,以便V相应的更新外观
- 最早在《设计模式》中,类适配器是通过多重继承实现的。在OC中可以实现协议,同时又继承超类,达到多重继承的效果
- 随处可见的代理(delegate)。对象适配器。
- 代理模式主要是适配器模式。
- 如同订阅报纸,你只需告诉出版社,然后就会收到每一期的新报纸。可以改变和取消订阅。