本章将介绍事件驱动程序,这个程序能保持运行、等待事件,并做相应的处理。
回调就是将一段可执行代码和特定的事件绑定起来。
OC中实现回调的4种途径。
(1) 目标-动作对:在程序开始等待前,要求当事件发生时,向指定的对象发送某个特定消息。这里接收消息的对象是目标,消息的选择器是动作。
(2) 辅助对象:在程序开始等待前,要求当事件发生时,向遵守相应协议的辅助对象发送消息。 委托对象和数据源是常见的辅助对象。
(3) 通知:苹果公司提供了通知中心对象。在程序开始等待前,可以告诉通知中心某个对象正在等待某些特定的通知,当其中的某个通知出现时,向指定的对象发送特定的消息。
(4) Block对象:Block是一段可执行的代码。在程序开始等待前,声明一个Block对象,当事件发生时,执行这段Block对象。
1、运行循环
创建一个CallBacks项目。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSRunLoop是运行循环的类,NSRunLoop 实例会持续等待,直到特定事件发生时,执行回调
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
Product->Stop结束程序。
2、目标-动作对
计时器使用的是目标-动作对。
首先创建一个新文件,BNRLogger
.h文件
#import <Foundation/Foundation.h>
@interface BNRLogger : NSObject
//
@property (nonatomic) NSDate *lastTime;
- (NSString *) lastTimeString;
//动作方法总是有一个实参,它是用于传入发送动作消息的那个对象
- (void) updateLastTime:(NSTimer *)t;
@end
.m文件
#import "BNRLogger.h"