前言
程序啟動(dòng)時(shí)在viewDidLoad中執(zhí)行a=b+c芬萍,a=b+c表示將表達(dá)式的結(jié)果賦給a脓杉,而之后改變b或c的值不會(huì)影響a,除非在別的方法中進(jìn)行刷新操作信粮。但在響應(yīng)式編程中馋袜,a的值會(huì)隨著b或c的更新而更新男旗。
使用場(chǎng)景
在MVC軟件架構(gòu)中,響應(yīng)式編程允許將相關(guān)模型的變化自動(dòng)反映到視圖上欣鳖,反之亦然察皇。
典型框架
ReactiveCocoa? ReactiveCocoa介紹與使用
例子
創(chuàng)建ResponseToolClass類
#import typedef void(^responseBlock)(NSUInteger integerB , NSUInteger integerC);
@interface ResponseToolClass : NSObject
- (void)addIntegerB:(NSUInteger)integerB integerC:(NSUInteger)integerC;
- (void)results:(responseBlock)response;
@end
#import "ResponseToolClass.h"
@interface ResponseToolClass ()
@property (nonatomic , strong) void(^saveResponseBlock)(NSUInteger integerB , NSUInteger integerC);
@end
@implementation ResponseToolClass
- (void)addIntegerB:(NSUInteger)integerB integerC:(NSUInteger)integerC{
? ? self.saveResponseBlock(integerB, integerC);
}
- (void)results:(responseBlock)response{
? ? self -> _saveResponseBlock = [response copy];
}
@end
在ViewController中調(diào)用
@interface ViewController ()@property (nonatomic , strong) ResponseToolClass * toolClass;
@end
@implementation ViewController
- (void)viewDidLoad {
?[super viewDidLoad];
?__block NSUInteger integerA;
?[self.toolClass results:^(NSUInteger integerB, NSUInteger integerC) {
? ? integerA = integerB + integerC; ? ? ??
? ? ?NSLog(@"%ld",integerA);?
?}];
};
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
? ? NSUInteger integerB = arc4random() % 101;
? ? NSUInteger integerC = arc4random() % 10;
? ? [self.toolClass addIntegerB:integerB integerC:integerC];
}
- (ResponseToolClass *)toolClass{
? ? if (!_toolClass) {
? ? ? ? _toolClass = [[ResponseToolClass alloc] init];
? ? }
? ? return _toolClass;
}
此時(shí)點(diǎn)擊屏幕,integerA隨著點(diǎn)擊泽台,值在隨著變化什荣。即響應(yīng)式編程思想
代碼
文章中的代碼都可以在我的GitHub?ReactiveObjCDemo?找到