Qt信号/槽机制在Objective-C上的实现。
- 为你的工程使用Xcode Workspace,并添加你的工程与本工程
NSObjectSignals/NSObjectSignals.xcodeproj
- 在你的工程
Embedded Binaries
配置下添加本工程的framework #import <NSObjectSignals/NSObject+SignalsSlots.h>
和Qt下信号槽操作类似,首先为类声明信号
- (NS_SIGNAL)clickView;
再声明,并实现监听此信号的槽函数
// xxx.h
- (NS_SLOT)onClickView;
// xxx.m
- (NS_SLOT)onClickView {
NSLog(@"View clicked;");
}
然后连接信号与槽
[self connectSignal:@selector(clickView) forObserver:observer slot:@selector(onClickView)];
触发信号的方式和Qt有些许差别
[self emitSignal:@selector(clickView) withParams:nil];
- 非线程安全,如果需要线程安全需求,可使用
dispatch_queue
操作。 - 信号声明后,不需要实现。可以使用
NS_CLOSE_SIGNAL_WARN()
宏关闭未实现警告 - 连接同时支持block方法,使用方法见Demo