美文网首页
Objective-C单向数据流的实际应用

Objective-C单向数据流的实际应用

作者: 帅气的阿斌 | 来源:发表于2018-05-14 12:15 被阅读106次

核心问题和思想:

在app开发时,经常会使用到单例,普通的app逻辑如果不太复杂,一般不会涉及到多线程问题,比如单例中的某个属性(常用到的如 账户余额 限时抢购的结束时间),会被多个页面使用到,一般属性我们都是给予noatomic,如果是多线程频繁访问可能会导致crash。更多关于atomic和noatomic了解: noatomic atomic

如果使用了atomic能避免crash,但是也会存在数据不一致的情况。

解决方案Objective-C单向数据流,简单来说就是数据驱动视图,数据的改变被视图监听,一旦数据发生改变,监听该数据的视图都会收到消息然后更新UI。

具体代码实现:

第三方库:Reflow 

github地址:Reflow下载地址

demo地址:Objective-C单向数据流方案

一、创建一个类,该类可以设成单例,继承自RFStore

该类将替代视图,直接承担修改数据和读取数据的职能,避免了视图对数据进行直接的操作

//.h声明

@interface BinRFStore : RFStore

+ (instancetype)sharedInstance;

#pragma mark - getter 获取数据

- (NSString *)nickname;

#pragma mark - action 修改数据

- (void)actionChangeNickname:(NSString *)nick;

//类扩展添加属性

@interface BinRFStore ()

    @property (nonatomic, strong) BinModel *mode;

@end

//.m实现 单例的创建和数据mode的创建赋值 mode为要操作的数据,不过要通过BinRFStore间接实现,而不是直接操作

+ (instancetype)sharedInstance{

    static dispatch_once_t onceToken;

    static BinRFStore *instance;

    dispatch_once(&onceToken, ^{

        instance = [[BinRFStore alloc] init];

    });

    return instance;

}

- (instancetype)init{   

    if (self = [super init]){

        self.mode = [[BinModel alloc] init];

        self.mode.nickname = @"昵称";

        self.mode.money = 102.f;   

    }   

return self;

}

//第一次获取数据的方法

- (NSString *)nickname{   

    return self.mode.nickname;

}

//在Reflow里,我们建议所有的数据修改都要生成新的model对象并替换,而不是直接修改原model对象的属性。更改数据的方法要遵循- (void)actionXXXXXX的格式

//Action是定义在store上的普通方法,action的方法名都以action开头。Reflow会对所有以action开头的方法做特殊处理

- (void)actionChangeNickname:(NSString *)nick{

    BinModel *newModel = [[BinModel alloc] init];

    newModel.nickname = nick;

    self.mode = newModel;

}

//视图监听的实现 只要通过 actionChangeNickname 方法改变了 nickname的值,[binRFStore subscribe:^(RFAction *action) {就会执行,我们就可以在这里更新视图UI了

    ......

    @property (nonatomic, strong) RFSubscription *subscription;

    ......

    BinRFStore *binRFStore = [BinRFStore sharedInstance];

    self.subscription = [binRFStore subscribe:^(RFAction *action) {

        NSLog(@"%@==%@==%@", NSStringFromSelector(action.selector), action.object, action.arguments);

    }];

demo地址:Objective-C单向数据流方案

相关文章

  • Objective-C单向数据流的实际应用

    核心问题和思想: 在app开发时,经常会使用到单例,普通的app逻辑如果不太复杂,一般不会涉及到多线程问题,比如单...

  • 单向数据流的应用与特性

    上次介绍了单向数据流的结构,这次来简单讨论下单向数据流的应用场景。 特性 单向数据流从设计模式上看,应用了大量的命...

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

  • 常见vue面试题

    1. 解释单向数据流和双向数据绑定单向数据流: 数据流是单向的。数据流动方向可以跟踪,流动单一,追查问题的时候可以...

  • 19.揭秘 React 真谛:数据状态管理

    如果说组件是 React 应用的骨骼,那么数据就是 React 应用的血液。单向数据流就像血液在应用体中穿梭。处理...

  • flux源码分析

    一、flux介绍 Flux是Facebook用来构建客户端web应用的应用架构。它利用单向数据流的方式来组合rea...

  • React native-Flux单项数据流

    Flux官方概述: Flux是Facebook用于构建客户端Web应用程序的应用程序架构。它通过使用单向数据流补充...

  • atomic和nonatomic/Objective-C单向数据

    Objective-C单向数据流方案(多个页面公用一个数据,最后的页面获取到了最新的数据,其余页面同步更新解决方案...

  • 双向数据绑定和单向数据流区别

    双向数据绑定和单向数据流区别 单向数据绑定优缺点:优点:单向数据流,所有状态变化都可以被记录、跟踪,状态变化通过手...

  • 前端三大框架:数据绑定与数据流

    目录序言单向数据绑定 vs 双向数据绑定单向数据流 vs 双向数据流数据流与数据绑定参考1. 序言在前端三大主流的...

网友评论

      本文标题:Objective-C单向数据流的实际应用

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