Oc语言之Protocol代理设计模式
2014-02-15 23:29
274 查看
Protocol简单来说是一系列不属于任何类的方法列表,其中生命的方法可以北任何类实现。这种模式一般称为代理(delegation)模式,类似于JAVA中的接口。
1.协议的实现用<> 号,继承的实现:号。
2.协议一般自己不实现,专门为别的类去实现、
3.两个类之间的通讯
协议的基本特点:
1.协议可以被任何类实现的方法
2.协议本身不是类,它是定义了一个其他类可实现的接口
3.Category也可以采用协议。
协议中的关键字:
@required:表示必须强制实现的方法
@ontional:表示可以有选择性的实现方法
代理设计模式的基本概念:
代理是指一个对象提供机会对另一个对象中的行为发生变化时做出的反应。如,当你将一颗石子(对象1)丢人到水中(行为发生了变化,之前可能在你手中)时,水面(对象2)泛起波纹(做出反应)。总而言之,代理设计模式的基本思想——两个对象协同解决问题,通常用于对象之间的通讯。
代理设计模式的基本特点:
(1)简化了对象的行为,最小化了对象之间的耦合度。
(2)使用代理,一般来说无需子类化。
(3)简化了我们的应用程序开发,既容易实现,又灵活。
定时器(NSTimer)的基本概念:
一旦创建了一个定时器(NSTimer实例),它可以按照一定的时间间隔,将制定消息发送到目标对象,并更新某个对象的行为,你可以选择在未来的某个时候将它“开启”,或者将它停止乃至销毁。
- (void)wantToFindApartement{
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(startFindApartment) userInfo:nil repeats:YES];
}
上面是调用是一个简单的定时器方法,2代表时间,target代表目标,@selector(startFindApartment)代表定时器调用的方法、userInfo代表用户信息、 repeates代表是否重复调用。
举例:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
或
NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:) userInfo:nilrepeats:NO];
[[NSRunLoopcurrentRunLoop] addTimer:myTimerforMode:NSDefaultRunLoopMode];
2、触发(启动)
当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。
可以使用-(void)fire;方法来立即触发该定时器;
注:You can use this method to fire a repeating timer without interrupting
its regular firing schedule. If the timer is non-repeating, it is
automatically invalidated after firing, even if its scheduled fire date
has not arrived.
在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;
在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。
3、停止
- (void)invalidate;
这个是唯一一个可以将计时器从runloop中移出的方法。
注:
NSTimer可以精确到50-100毫秒.
NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.
NSRunloop基本概念:
一个runroop就是一个时间处理的循环,用来不停的调度工作以及处理输入事件。使用runloop的目的是让你的线程在有工作的时候忙工作而没有工作的时候处于休眠状态。
在我们的应用程序中,你不需要创建NSRunroop对象,因为,在我们的主线程中(包含其他子线程)系统会自动创建NSRunroop对象。如果你需要访问当前线程中的runroop,你可以通过类方法“currentRunloop”
1.协议的实现用<> 号,继承的实现:号。
2.协议一般自己不实现,专门为别的类去实现、
3.两个类之间的通讯
协议的基本特点:
1.协议可以被任何类实现的方法
2.协议本身不是类,它是定义了一个其他类可实现的接口
3.Category也可以采用协议。
协议中的关键字:
@required:表示必须强制实现的方法
@ontional:表示可以有选择性的实现方法
代理设计模式的基本概念:
代理是指一个对象提供机会对另一个对象中的行为发生变化时做出的反应。如,当你将一颗石子(对象1)丢人到水中(行为发生了变化,之前可能在你手中)时,水面(对象2)泛起波纹(做出反应)。总而言之,代理设计模式的基本思想——两个对象协同解决问题,通常用于对象之间的通讯。
代理设计模式的基本特点:
(1)简化了对象的行为,最小化了对象之间的耦合度。
(2)使用代理,一般来说无需子类化。
(3)简化了我们的应用程序开发,既容易实现,又灵活。
定时器(NSTimer)的基本概念:
一旦创建了一个定时器(NSTimer实例),它可以按照一定的时间间隔,将制定消息发送到目标对象,并更新某个对象的行为,你可以选择在未来的某个时候将它“开启”,或者将它停止乃至销毁。
- (void)wantToFindApartement{
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(startFindApartment) userInfo:nil repeats:YES];
}
上面是调用是一个简单的定时器方法,2代表时间,target代表目标,@selector(startFindApartment)代表定时器调用的方法、userInfo代表用户信息、 repeates代表是否重复调用。
举例:
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
或
NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:) userInfo:nilrepeats:NO];
[[NSRunLoopcurrentRunLoop] addTimer:myTimerforMode:NSDefaultRunLoopMode];
2、触发(启动)
当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。
可以使用-(void)fire;方法来立即触发该定时器;
注:You can use this method to fire a repeating timer without interrupting
its regular firing schedule. If the timer is non-repeating, it is
automatically invalidated after firing, even if its scheduled fire date
has not arrived.
在重复执行的定时器中调用此方法后立即触发该定时器,但不会中断其之前的执行计划;
在不重复执行的定时器中调用此方法,立即触发后,就会使这个定时器失效。
3、停止
- (void)invalidate;
这个是唯一一个可以将计时器从runloop中移出的方法。
注:
NSTimer可以精确到50-100毫秒.
NSTimer不是绝对准确的,而且中间耗时或阻塞错过下一个点,那么下一个点就pass过去了.
NSRunloop基本概念:
一个runroop就是一个时间处理的循环,用来不停的调度工作以及处理输入事件。使用runloop的目的是让你的线程在有工作的时候忙工作而没有工作的时候处于休眠状态。
在我们的应用程序中,你不需要创建NSRunroop对象,因为,在我们的主线程中(包含其他子线程)系统会自动创建NSRunroop对象。如果你需要访问当前线程中的runroop,你可以通过类方法“currentRunloop”
相关文章推荐
- 第一个c++程序
- C++Primer(第五版)学习笔记
- c语言进阶总结1
- 【简单题】-CF-390B-Inna, Dima and Song
- 【二分查找】-POJ-2002-Squares
- 2013蓝桥杯C/C++本科B组预赛题目解答
- c++ com 在c#项目里面使用简单例子
- C++中的指针和->操作符
- C++学习资源汇总(持续更新中)
- 【Vim使用】7.OmniCppComplete ---------智能补全设置
- C++ sizeof 运算符总结
- 【温故而知新】C和C++4:STL概览
- pat advanced 1020 Tree Traversals
- qt-eclipse-c++环境配置(图形界面开发)
- GO和C++代码对比,GO少个25%代码
- c语言中运算符优先级
- C++中对成员访问操作符->的重载
- C++Primer学习笔记
- C++多态的灵活运用
- Effecive C++ 解析3