美文网首页程序员
【编程思想】

【编程思想】

作者: 大基本功 | 来源:发表于2018-05-29 22:29 被阅读7次
    链式编程思想

    链式编程思想: 是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

    链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

    代表: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);
    
    响应式编程思想

    响应式编程思想:不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,这些事件像流一样的传播出去,然后影响结果,借用面向对象的一句话,万物皆是流。

    代表:KVO运用。

    KVO的实现

    #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动态生成Person的子类(派生类)
         2.重写KVO_Person的属性set方法,目的:监听属性有没有改变
         3.修改对象的isa指针.
         */
        // 修改isa
        object_setClass(self, NSClassFromString(@"NSKVONotifying_Person"));
        
        // 保存观察者对象
        // self -> P;
        // 动态添加属性
        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:标志,去执行父类方法
        [super setAge:age];
        
        // 调用观察者的observeValueForKeyPath
        id observer = objc_getAssociatedObject(self, "observer");
        
        [observer observeValueForKeyPath:@"age" ofObject:self change:nil context:nil];
        
        NSLog(@"执行NSKVONotifying_Person");
    //    NSLog(@"%@",[super class]);
        
    }
    @end
    
    函数式编程思想

    函数式编程思想:是把操作尽量写成一系列嵌套的函数或者方法调用。

    函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)

    代表: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){
            // 计算的代码 写在这里面
            reslut+=5;
            reslut+=5;
            reslut+=5;
            reslut+=5;
            return reslut;
        }] equle:20];
        NSLog(@"%d",isReal);
    

    相关文章

      网友评论

        本文标题:【编程思想】

        本文链接:https://www.haomeiwen.com/subject/xxfzjftx.html