簡(jiǎn)介
ReactiveCocoa 是一個(gè) iOS 中的函數(shù)式響應(yīng)式編程框架悄但,它受 Functional Reactive Programming 的啟發(fā)册烈,是 Justin Spahr-Summers 和 Josh Abernathy 在開發(fā) GitHub for Mac 過(guò)程中的一個(gè)副產(chǎn)品,它提供了一系列用來(lái)組合和轉(zhuǎn)換值流的 API 抬纸。
ReactiveCocoa大體框架
1.信號(hào)源(核心部分卦停,其它組件都是圍繞它運(yùn)作)
- RACStream
- RACSignal
- RACSubject
- RACSequence
2.訂閱者
- RACSubscriber
- RACMulticastConnection
3.調(diào)度器
- RACScheduler
4.清潔工
- RACDisposable
對(duì)于一個(gè)應(yīng)用來(lái)說(shuō),絕大部分的時(shí)間都是在等待某些事件的發(fā)生或者響應(yīng)某些狀態(tài)的變化矾湃,比如用戶的觸摸事件亡脑、應(yīng)用進(jìn)入后臺(tái)、網(wǎng)絡(luò)請(qǐng)求成功刷新界面等等邀跃,而維護(hù)這些狀態(tài)的變化霉咨,常常會(huì)使代碼變得非常復(fù)雜,難以擴(kuò)展拍屑。而ReactiveCocoa給出了一種非常好的解決方案途戒,它使用信號(hào)來(lái)代表這些異步事件,提供了一種統(tǒng)一的方式來(lái)處理所有異步的行為僵驰,包括代理方法喷斋、block回調(diào)、target-action機(jī)制蒜茴、通知星爪、KVO等等:
// 代理方法
[[self rac_signalForSelector:@selector(webViewDidStartLoad:)
fromProtocol:@protocol(UIWebViewDelegate)]
subscribeNext:^(id x) {
// 實(shí)現(xiàn) webViewDidStartLoad: 代理方法
}];
// target-action
[[self.avatarButton
rac_signalForControlEvents:UIControlEventTouchUpInside]
subscribeNext:^(UIButton *avatarButton) {
// avatarButton 被點(diǎn)擊了
}];
// 通知
[[[NSNotificationCenter defaultCenter]
rac_addObserverForName:kReachabilityChangedNotification object:nil]
subscribeNext:^(NSNotification *notification) {
// 收到 kReachabilityChangedNotification 通知
}];
// KVO
[RACObserve(self, username) subscribeNext:^(NSString *username) {
// 用戶名發(fā)生了變化
}];