Skip to content

piuSora/DataSynchronized

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
zyf
Jun 18, 2021
e6e2c7d · Jun 18, 2021

History

33 Commits
No commit message
Jun 18, 2021
Aug 12, 2019
Aug 9, 2019
Aug 5, 2019
Aug 19, 2019

Repository files navigation

DataSynchronized

a solution for iOS data synchronization

iOS开发本地数据同步的解决方案

What for

实现本地数据双向绑定,修改一处数据,其他数据自动同步的功能。主要解决有数据同步需求但采用Notification不易于开发和维护,重新拉取网络数据不方便(比如有分页)且有延时的问题.

Features

  • 一行代码调用,数据双向绑定,一处修改,其他绑定数据自动同步
  • 内存占用小,绑定耗时短
  • 低入侵,不使用hook、+load等方法
  • 采用kvo实现,但调用者无需关心内存以及监听的释放
  • 内存依赖于绑定的model,model dealloc时自动释放内存和监听移除
  • 数据路径加载采用kvc实现,支持多级路径
  • 支持同种数据绑定,不同种数据映射绑定

How To Use

Manually

  • clone并将DataSync文件夹拖入项目

Pod

TODO . . .

Coding

  • 在需要绑定数据处import "DataSynchronized.h"

  • ObjC调用

    • 同种数据类型
    //在获取到数据后进行数据源绑定,如果有多个字段用逗号间隔,支持多级路径
        __weak typeof(self)weakSelf = self;
        [_data addDataSynchronizedKeyPath:@"isFollow,myName,otherModel.otherName" IDPath:@"myID" onChange:^(MyModel *  _Nonnull model) {
            //数据改变回调,在此处执行UI操作
            [weakSelf.tableView reloadData];
        }];
        return _data;
    • 不同数据类型
        /*
         把data绑定到MyModel类上
         data.otherName与MyModel.myName绑定
         将data.othrID作为绑定的改变标识符
         */
        [_data bindingDataSynchronizedTo:MyModel.class keyPaths:@{@"myName":@"otherName"} IDPath:@"otherID" onChange:^(OtherModel * _Nonnull model) {
            //数据改变回调,在此处执行UI操作
            weakSelf.textField.text = model.otherName;
        }];
        return _data;
  • Swift调用

    • 由于用到kvc和kvo所以在swift上使用稍微麻烦,需要在model每个属性前加上@objc dynamic
    class MyModel: NSObject {
      @objc dynamic var myID : String?
      @objc dynamic var myName : String?
    }
    • 手动引入文件需要桥接,然后正常使用
    array.addDataSynchronizedKeyPath("myName", idPath: "myID") { (model) in
      let myModel = model as! MyModel
      print(myModel.myName!,myModel.myID!)
    }
  • 详细使用方法请参考demo

Profile

内存

该库在绑定数据时维护一个静态类,为每个绑定数据生成一个内存管理对象:DataSynchronizedManager和一个数据同步Info:DataSyncInfo 每个大小为48bytes,对10000条数据添加绑定理论上额外消耗内存936KB

memory_profile

耗时

time profile环境为iPhone5s (iOS12.0) 5次同时为10000条数据进行绑定耗时数据

time_profile

Support

after iOS 6.0

More

有bug或者建议,欢迎issue、pr我

About

a solution for iOS data synchronization

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published