最近有点忙,设计产品功能,改官网,这一闲下来就突然迷茫了,不知道该干点什么,到今天已经一个月没有更新博客了,真是不应该,坚持更新博客是一种记录生活的方式。
今天主要讲的是iOS中经典的设计模式-KVO模式。KVO提供了一种机制,指定一个被观察对象,当这个对象的某个属性发生变化的时候,这个对象会获得属性变化的通知,以作出相应的处理。KVO不管是在面试还是工作中我们都会被用到这个东西,今天我将用一个demo通过

demo效果:
点击增加按钮时候num值加1,
点击重置按钮时候num值归0,
点击减少按钮时候num值减1;
KVO分三步走:
1.注册观察者;
2.在观察的属性变化的方法里面做处理;
3.移除KVO;
一、使用OC语言创建KVO观察者模式
准备工作:
我们建一个新工程,名字叫做TestDemo。创建完之后通过Cocoa Touch Class添加一个继承于NSObject的类,起名叫做myKVO,作为我们要用的观察者对象;

操作我们新建的myKVO类
myKVO.h
|
|
myKVO.m
|
|
操作我们ViewController
viewController.h
|
|
viewController.m
|
|
一、使用Swift语言创建KVO观察者模式
使用Swift语言是真的简洁,我们只需要创建一个Swift工程就行了,别忘了在选择语言的时候是Swift而不是Object-C哦!我们只需要在你新建的工程中的viewController.swift文件操作即可;
操作我们观察者对象myKVO
Swift中的属性分为两种属性,一种就是计算型属性 一种就是存储型属性.
1.计算型属性是什么?
计算型属性是通过计算而得出来的属性,这种属性相区别于存储属性这种属性是不会存储的。如果是计算型属性,那么提供setter方法那就一定需要提供getter方法,可以直接只有一个getter方法,其实仔细想一想这样的设计是有缘由的,计算型属性我们是为了得出什么?我们是为了获取计算出来的值,那么你提供了setter方法,不提提供getter方法(他又不会存储)那么你是不能得到想要的值的,setter方法他会将新值保存在一个叫newValue中,我们可以直接用,当然getter中也有一个newValue。
2.存储型属性是什么?
存储型属性就是一个需要存储的属性,如果我们需要自定义setter和getter方法,我们得注意一下,setter方法存在两种,willSet和didSet,这两种方法我们不一定都需要实现,根据需求实现各自的方法,willSet是将要赋值的时候调用的,而didSet方法是已经赋完了值之后调用的。可以提供他的getter方法,和计算型属性不一样的是,他可以有setter方法没有getter,想想设计也是相当的合理,既然他是存储型的属性,已经存起来了,那么我们可以取得到。在willSet方法里没有必要赋值,除非你要改变新赋的值,getter方法和setter 方法不能同时出现。
操作我们viewController
以上就是此次讲解,欢迎大家下载交流!Demo地址如下:
Swift版本:KVOSwiftDemo
OC版本:KVODemo