在开发中很好的利用某种特定的开发模式,则能对编写的程序起到画龙点睛的作用。
1.协议代理设计模式:
协议(protocol)类似于Java中的接口,但与接口不同的是,协议没有父类,也不能定义实例变量,在协议中定义相应的方法,在其他的类中进行实现。因此,协议也是iOS开发中比较特殊的一种设计结构。
协议有两种方法,一种是必须实现的方法,也就是require方法;另一种是可选的方法即optional,引入协议的类,必须实现require方法,可以选择实现optional方法。(与Java的abstract抽象类类似,abstract修饰的方法必须在其继承类中实现)。
#import<...>
@protocolHelloProtocol
@required
- (void)sayHello;
@optional
- (void)handshake;
@end
2.通知:
通知(NSNotification):
一个通知包括通知发布/通知监听和通知移除三个部分。
通知发布者:发布通知到通知中心;
通知中心:接收所有通知发布者发布的通知,并传递给通知观察者;
通知观察者:接收通知中心发布的通知。
NSNotification*noitifcation =
[NSNotificationnotificationWhithName:(NSString*)object:(id) userInfo:(NSDictioncary*)];
使用通知前,需要创建通知对象。通知对象有两个重要的成员变量---name和object,name代编该通知的名称,也是唯一标识这个通知对象,object代表了通知的发送者。NSNotification对象还包含了一个可选参数----字典(NSDictionary),字典中存储了一些值,在传递的过程中供接收者使用。
通知创建完成之后,需要控制通知中心发送通知,系统中所有注册的通知都将放在通知中心中。
获取通知:
+(NSNotificationCenter*)defaultCenter
注册通知监听者:
-(void)addObserver:(id)observer selector:(SEL)aSelector
name:(NSString*)aName object:(id)anObject
发送通知:
-(void)postNotificationName:(NSString*)aName object:(anObject)
移除通知监听者:
-(void)removeObserver:(id)observer name:(NSString*)aName
object:(id)anObject
3.KVO:
KVC机制是基于KVC,KVC(NSKey ValueCoding)是代表“键-值-编码”的意思,它是一种简洁访问对象属性的机制,而不是通过调用getter和setter方法或者点语法区访问对象属性。
设置属性值
[selfsetValue:@"Jack"ForKey:@"name"]
Value是属性需要设置的值,而Key则是该属性的名称。设置完成后,可以通过valueForKey方法访问属性。
访问属性
[selfvalueForKey:@"name"]
KVO:
KVO(NSKeyValueObserving)是代表“键-值-监听”,它确立了一个机制,即当观察者对象属性发生变化时,我们就能收到一个“通知”。这和通知有所区别,通过可以有多个观察者监听通知,是一对多的关系;而KVO则是一个监听者,是一对一的关系
首先注册对象:
-(void) addObserver:(NSObject*)forKeyPath:(NSString*)
options:(NSKeyValueObservingOptions) context:(void*)
NSObject指监听者,KeyPath指需要监听的属性,context是指方便传输需要的数据,是一个指针。option是监听的选项,也就说明监听返回信息的字典。它包含两个值---NSKeyValueObservingOptionNew和NSKeyValueObservingOptionOld,分别代表返回信息字典的新值和旧值。
Value发生变化自动调用:
-(void)observeValueForKeyPath:(NSString*) ofObject:(id)
change:(NSDictionary*) context:(void*)
Object指被监听的对象,change字典里存储了一些变化前后的数据。
4.MVC模式:
MVC模式可以称为MCV模式,M(Model)和V(View)是分隔开来的,通过Controller从而使两个建立关系。
Controller和View之间的关系如下:
在view视图中的操作可以直接“告诉”控制器以使控制器响应;
view需要实现的协议代理也可以由控制器完成;
view需要的数据源也需要控制器来提供;
view需要实现的动作也可以由控制器提供目标实现。
在MVC设计模式中还有一个重要的参与者就是Model模型,简单来解释其作用就是:定义一个应用所有需要抽象出来的数据结构以及它们之间关系,还有获取它们的途径等。
Model和Controller之间的交互是单向的,也就是Model没有指向Controller的关系对应。因为模型不需要知道Controller的存在,目的是为了降低程序的耦合,把此部分的模型移到项目中还可以使用。
网友评论