鏈?zhǔn)骄幊趟枷?/h5>
鏈?zhǔn)骄幊趟枷? 是將多個(gè)操作(多行代碼)通過(guò)點(diǎn)號(hào)(.)鏈接在一起成為一句代碼,使代碼可讀性好查刻。a(1).b(2).c(3)
鏈?zhǔn)骄幊烫攸c(diǎn):方法的返回值是block,block必須有返回值(本身對(duì)象),block參數(shù)(需要操作的值)
代表:masonry框架于宙。
@interface JiSuanQiManager : NSObject
@property (nonatomic, assign) NSInteger result;
- (JiSuanQiManager *(^)(NSInteger))add;
@end
#import "JiSuanQiManager.h"
@implementation JiSuanQiManager
- (JiSuanQiManager * (^)(NSInteger))add
{
return ^(NSInteger value){
_result += value;
return self;
};
}
@end
JiSuanQiManager *mgr = [[JiSuanQiManager alloc] init];
mgr.add(5).add(5).add(7).add(8);
NSLog(@"%ld",mgr.result);
響應(yīng)式編程思想
響應(yīng)式編程思想:不需要考慮調(diào)用順序扛稽,只需要知道考慮結(jié)果吁峻,類似于蝴蝶效應(yīng),產(chǎn)生一個(gè)事件在张,會(huì)影響很多東西用含,這些事件像流一樣的傳播出去,然后影響結(jié)果帮匾,借用面向?qū)ο蟮囊痪湓捵暮Вf(wàn)物皆是流。
代表:KVO運(yùn)用瘟斜。
KVO的實(shí)現(xiàn)
#import <Foundation/Foundation.h>
@interface NSObject (KVO)
- (void)xmg_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:( void *)context;
@end
#import "NSObject+KVO.h"
#import <objc/message.h>
@implementation NSObject (KVO)
- (void)xmg_addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context
{
/*
1.runtime動(dòng)態(tài)生成Person的子類(派生類)
2.重寫KVO_Person的屬性set方法,目的:監(jiān)聽(tīng)屬性有沒(méi)有改變
3.修改對(duì)象的isa指針.
*/
// 修改isa
object_setClass(self, NSClassFromString(@"NSKVONotifying_Person"));
// 保存觀察者對(duì)象
// self -> P;
// 動(dòng)態(tài)添加屬性
objc_setAssociatedObject(self, "observer", observer, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end
#import "Person.h"
@interface NSKVONotifying_Person : Person
@end
#import "NSKVONotifying_Person.h"
#import <objc/message.h>
@implementation NSKVONotifying_Person
- (void)setAge:(NSInteger)age
{
// super:標(biāo)志缸夹,去執(zhí)行父類方法
[super setAge:age];
// 調(diào)用觀察者的observeValueForKeyPath
id observer = objc_getAssociatedObject(self, "observer");
[observer observeValueForKeyPath:@"age" ofObject:self change:nil context:nil];
NSLog(@"執(zhí)行NSKVONotifying_Person");
// NSLog(@"%@",[super class]);
}
@end
函數(shù)式編程思想
函數(shù)式編程思想:是把操作盡量寫成一系列嵌套的函數(shù)或者方法調(diào)用痪寻。
函數(shù)式編程特點(diǎn):每個(gè)方法必須有返回值(本身對(duì)象),把函數(shù)或者Block當(dāng)做參數(shù),block參數(shù)(需要操作的值)block返回值(操作結(jié)果)
代表:ReactiveCocoa
@interface JiSuanQiManager : NSObject
@property (nonatomic, assign) NSInteger result;
- (void)add:(NSInteger)value;
- (void)sub:(NSInteger)value;
- (JiSuanQiManager *)jisuan:(NSInteger(^)(NSInteger))block;
- (JiSuanQiManager *)log;
- (BOOL)equle:(NSInteger)value;
@end
#import "JiSuanQiManager.h"
@implementation JiSuanQiManager
- (JiSuanQiManager *)jisuan:(NSInteger (^)(NSInteger))block
{
_result = block(_result);
return self;
}
- (JiSuanQiManager *)log
{
NSLog(@"%ld",_result);
return self;
}
- (BOOL)equle:(NSInteger)value
{
return _result == value;
}
@end
JiSuanQiManager *mgr = [[JiSuanQiManager alloc] init];
BOOL isReal = [[mgr jisuan:^(NSInteger reslut){
// 計(jì)算的代碼 寫在這里面
reslut+=5;
reslut+=5;
reslut+=5;
reslut+=5;
return reslut;
}] equle:20];
NSLog(@"%d",isReal);