YJ 系列开源库
- 支持 iOS 8.0 和 Swift 4.2 开发。
- 按需加载,可根据自己的需求加载不同的开源库。
整体架构和苹果类似,每一层都有各自的开源库。
AppFrameworks
1 1.1 Foundation
1.1.1 AOP
AOP 切面编程,将一对一的通信转换为一对多的通信。
1.1.2 Cache
Cache 缓存工具,在 NSCache 的基础上增加了 NSDictionary 的相关功能。
1.1.3 日历
日历工具,快速获取天、时、分等。
1.1.4 代码注入
编译时注入代码,运行时提取函数或 Block 执行,一站式解决 APP 启动卡顿问题。
1.1.5 字典模型
快速高效的转换模型和模型。
1.1.6 目录
快速获取应用内目录
1.1.7 文件管理器
NSFileManager扩展,支持快速移动文件。主要替代系统方法moveItemAtPath:toPath:error:
和moveItemAtURL:toURL:error:
1.1.8 HTTP
- 解析 http 链接,快速获取其中参数,支持 URLDecode 解码;
- 组装 http 链接,快速组装相关参数,支持 URLEncode 编码。
1.1.9 KVO
- 支持以 Block 方式监听 KeyValue 变化。
- 观察者自动移除,无需手动调用
removeObserver: forKeyPath:
移除。
1.1.10 日志
- NSLog打印优化,支持Unicode自动转换为中文字符输出。
- YJLog日志输出,支持自定义日志级别输出内容。
1.1.11 通知中心
NSNotificationCenter的block回调,并支持自动释放。
1.1.12 安全性
保护APP稳定运行,防止崩溃。
1.1.13 调度器
Scheduler调度器,一站式解决代码耦合问题。
1.1.14 单例
- 通过宏定义,快速将任何类转换为单例类。如
YJNSSingletonW(NSMutableDictionary, @"identifier")
- 可定制全局单例和局部单例。
1.1.15 交换
支持随时随地交换方法。
1.1.16 定时器
替换NSTimer实现相关的计时器功能。
多种生命周期:
- 随着应用的回收而回收。
- 随着当前使用类的回收而回收。如VC回收时,YJSTimer也会回收。
1.1.17 URLCode
URLEncode编码和URLDecode解码
1.1.18 URLRouter
Router是NavigationRouter的基础库,主要用于实现路由跳转。
- 自动注入,无需考虑加载时机。
- 支持拦截处理未注入的url。
1.1.19 URLSession
大型APP网络架构,具有以下特性:
- 兼容市面上任何一款网络SDK,并可以多个SDK协同工作;
- 多种设计模式,按照项目需要随意组装架构;
- 多种请求方式,可以面向接口请求服务器或面向对象请求服务器;
- 支持网络重连。
1.2 UIKit
1.2.1 Autolayout
Autolayout主要实现NSLayoutConstraint的相关扩展和封装,它能使我们关于屏幕布局的开发越来越简单。
- IOS和Swift的编程代码一模一样。
- 代码写法模仿Apple关于约束的原生伪代码,增加代码可读性。
- 将IOS9推出的NSLayoutAnchor迁移到IOS6上使用。
1.2.2 CollectionViewManager
UICollectionView封装
- 支持市面上百分之百的架构,无需修改原有框架结构。你可以把它作为插件,也可以把它作为UICollectionView的控制中心使用。
- 减轻UIViewController的负担,使其代码尽可能精简,可读性更高。UIViewController不再关注UICollectionViewCell的相关显示和缓存。UIViewController与UICollectionViewCell完全隔离。
- 自带存储数据源,支持单数组和多组显示的数据源。
- 自动将数据从UIViewController传输到UICollectionViewCell,支持任意数据类型的传输。
- 支持多种创建UICollectionViewCell的方式,如纯代码、xib和storyboard。无需改变你写代码的习惯。
- 支持UICollectionViewFlowLayout动态布局;可设置一行显示个数,系统自动计算item宽度;可开启高度自适应,框架会根据计算的宽度动态缩放宽。
- 自动register注册UICollectionViewCell,自动显示UICollectionViewCell,自动缓存UICollectionViewCell。
- 自动计算cell显示的高度或手动计算cell显示的高度,并缓存高度。多种缓存高度策略:
- 根据相同的UICollectionViewCell类缓存高度;
- 根据NSIndexPath对应的位置缓存高度;
- 根据类名和NSIndexPath双重绑定缓存高度。
1.2.3 颜色
UIColor相关。
- 函数生成UIColor,支持RGB和十六进制。
- 点语法快速设置背景色。
1.2.4 输入长度
UITextField和UITextView可输入长度控制。
1.2.5 导航栏
NavigationBar 主要用于配置导航标题和按钮。
1.2.6 导航路由器
NavigationRouter 主要用于实现项目组件化,基础库是 Router。
1.2.7 页面视图管理器
PageViewManager 主要实现对 UIPageViewController 的封装,支持轮播图、导航图、小说翻页等多种翻页模式。
- 多种配置模式适应任何多页面需求。
- 任何间隔切换VC,内存释放稳定。
1.2.8 滚动视图管理器
ScrollViewManager主要用用于监听UIScrollView的滚动状态。
1.2.9 TableViewManager
UITableView管理器
- 支持市面上百分之百的架构,无需修改原有框架结构。你可以把它作为插件,也可以把它作为TableView的控制中心使用。
- 减轻UIViewController负担,使其代码尽可能精简,可读性更高。UIViewController不再关心UITableViewCell的相关显示和缓存。UIViewController与UITableViewCell完全隔离。
- 自带存储数据源,支持UITableViewStylePlain和UITableViewStyleGrouped显示的数据源。
- 自动从UIViewController传输数据到UITableViewCell,支持任意数据类型的传输。
- 支持多种创建UITableViewCell的方式,如纯代码、xib和storyboard。无需改变你编写代码的习惯。
- 自动 registering 注册UITableViewCell,自动显示UITableViewCell,自动缓存UITableViewCell。
- 自动计算cell显示的高度或手动计算cell显示的高度,并缓存高度。多种缓存高度策略:
- 根据相同的UITableViewCell类缓存高度;
- 根据NSIndexPath对应的位置缓存高度;
- 根据类名和NSIndexPath双重绑定缓存高度。
1.2.10 ViewControllerTransitioning
UIViewController 和 UINavigationController 转场动画自定义。
1.2.11 ViewGeometry
UIView(UIViewGeometry)相关扩展,可快速设置frame、bounds和center。
AppServices
2 2.1 CoreData
CoreData封装
- 多级托管对象上下文管理,有NSPrivateQueueConcurrencyType和NSMainQueueConcurrencyType。
- APP进入后台或崩溃前,自动保存数据,保证数据不丢失。
- 可自定义自动间隔保存,如每3分钟执行一次数据库保存操作。
- 手动保存数据,支持前台保存和后台保存。
- 通过迁移管理器做数据库版本升级时,可实时获取升级进度。
开发工具
3 3.1 泄漏
内存泄漏分析器,用于捕获项目中有内存泄漏的UIViewController、UIView和Property属性。
3.2 内存信息
主要用于获取运行过程中的RAM相关信息,如剩余内存。
3.3 时间轴
时间轴记录器,记录操作的耗时时间,主要用于启动优化。
3.4 时间分析器
主要用于分析引起主线程卡顿的代码。
- 支持定制模块分析。
- 支持设置分析频率和帧间隔。
- 控制台打印 VC 加载时间。
系统
4 4.1 调度
GCD 相关封装
4.2 Pthread
pthread 锁相关封装
4.2 安全
4.2.1 Keychain
面向对象管理 Keychain,支持自定义存储数据。
4.2.2 随机
快速生成指定长度的随机密码。
附录
作者
姓名:杨君
QQ:937447974
YJ技术支持群:557445088
如果你觉得这个框架很赞,请点击右上角的 Star 按钮;如果你对我的框架感兴趣,并想持续获得本人最新的框架源文件,欢迎点击右上角的 Fork 按钮。
修订历史
版本 | 时间 | 描述 |
---|---|---|
1.0 | 2016-05-11 | 项目上线 |
1.1.0 | 2016-05-12 | GCD 封装 |
1.2.0 | 2016-05-16 | YJCocoa 拆分,可根据自身需求选择相关库 |
1.3.0 | 2016-05-20 | YJCocoa 引入 'YJCocoa/CoreServicesLayer/Foundation/Log'。NSLog 打印优化,Unicode 自动转化为中文输出。 |
1.4.0 | YJCocoa 引入 'YJCocoa/CocoaTouchLayer/UIKit/AutoLayout'。YJAutoLayout 主要实现 NSLayoutConstraint 的相关扩展和封装,使屏幕布局开发变得更简单。 | |
1.4.1 | YJCocoa.h 自动引入 'YJCocoa/CocoaTouchLayer/UIKit/AutoLayout' | |
1.5.0 | YJCocoa 引入 'YJCocoa/CocoaTouchLayer/UIKit/PageView'。PageView 主要实现对轮播图、导航图、小说翻页等多种翻页模式封装。 | |
1.6.0 | 2016-05-21 | YJCocoa 引入 'YJCocoa/CocoaTouchLayer/UIKit/TableView'。UITableView 封装。 |
1.7.0 | YJCocoa/CocoaTouchLayer/UIKit/CollectionView 上线,UICollectionView 封装 | |
1.7.1 | 2016-05-23 | 部分方法调整,说明文档更新 |
1.7.2 | 2016-05-25 | system 中 gcd 封装升级,支持串行和并行 |
1.8.0 | 2016-05-26 | 新库 'YJCocoa/CoreServicesLayer/Foundation/Singleton' 上线,单例管理中心解决项目级单例滥用问题。 |
1.9.0 | 新库 'YJCocoa/CoreServicesLayer/Foundation/HttpAnalysis' 上线,快速解析 http 链接获取其中参数 | |
2.0.0 | YJCocoa 开发文档首次发包 | |
2.0.1 | 新库 'YJCocoa/CocoaTouchLayer/UIKit/InputLength' 上线,UITextField 和 UITextView 增加可输入长度控制 | |
2.0.2 | 'YJCocoa/CocoaTouchLayer/UIKit/PageView' 升级,任何间隔切换 VC,内存释放稳定。 | |
2016-05-30 | 'TableView' 和 'CollectionView' 升级,增加快速刷新 cell 的方法。 | |
2016-05-31 | 'AutoLayout' 升级,增加动画修改约束和快速查找约束的方法。 | |
2.1.0 | 2016-06-01 | 'UIViewGeometry' 上线。UIView(UIViewGeometry)相关扩展,可快速设置 frame。 |
2.1.1 | 2016-06-08 | 修复 'InputLength' 引起 UITextView 崩溃问题 |
2.2.0 | 2016-06-30 | HttpAnalysis 库更名为 Http,增加组装 http 相关参数的方法。 |
2016-07-06 | NavigationBar 库上线,可自定义配置 UINavigationBar;TableView 和CollectionView 支持分页请求数据。 | |
2016-07-07 | System 库删除 dispatch_async_UI block;TableView 和CollectionView 支持用户滚动监听 | |
2.2.1 | 2016-07-08 | CollectionView 支持 SectionHeaderView 和 SectionFooterView 显示 |
2.2.2 | 2016-07-11 | System 支持弱引用 __weakSelf 和强引用 __strongSelf |
2016-07-12 | TableView 和CollectionView 支持用户滑动到底部监听 | |
2016-07-13 | 修复NavigationBar 在 IOS7 崩溃 | |
2.3.0 | 2016-07-22 | TableView 和CollectionView 支持动态配置创建 cell 的方式(XIB、class和SB);TableView 中 YJTableViewDelegate 升级清除缓存高方法。 |
2016-07-25 | PerformSelector 库上线,用于安全执行 Selector,可携带多个参数。 | |
2016-07-29 | 'CoreOSLayer/Security/Randomization' 库上线,可快速生成指定位数的随机密码。 | |
2016-08-02 | 'CoreOSLayer/Security/Keychain' 库上线,面向对象管理Keychain,支持自定义存储数据。 | |
修复YJNavigationBar和其他第三方SDK冲突,YJ后添加后缀C。 | ||
2.4.0 | 2016-08-05 | Log 升级,新增方法NSLogS(id obj),可快速打印对象。 |
Timer 上线,替换 NSTimer 实现相关计时器功能。 | ||
System 升级,新增同步主线程方法 dispatch_sync_main。 | ||
2.4.1 | 2016-08-10 | AutoLayout 修复 bug:二次执行相同代码无法修改约束。 |
2016-08-17 | Timer 升级,修复主线程卡顿崩溃,时间间隔可支持 0.001 秒。 | |
2.4.2 | 2016-08-19 | ViewGeometry 升级,支持快速设置 UIView.bounds。 |
2016-08-23 | TableView 升级,支持快速实现悬浮 cell。 | |
3.0.0 | 2016-08-24 | YJCocoa 架构升级,每一层都有特定的类前缀。 |
3.0.1 | 2016-09-01 | http 解析器和组装器升级 |
2016-09-08 | UIKit 层代码优化 | |
3.1.0 | 2016-09-26 | DictionaryModel 上线,支持快速高效的转换模型和 Model。 |
4.0.0 | 2016-10-11 | 根据苹果新的框架结构,YJCocoa 架构重组。 |
4.1.0 | 2016-10-12 | Directory 上线,可快速获取应用内目录。 |
2016-10-14 | AOP 上线,支持将一对一的通信转换为一对多的通信。 | |
2016-10-15 | TableView 和CollectionView 支持AOP代理 | |
4.1.1 | 2016-10-17 | TableView 架构升级,并更名为TableViewManager |
2016-10-18 | CollectionView 架构升级,并更名为CollectionViewManager | |
4.2.0 | 2016-10-20 | ViewGeometry 支持获取 UIScrollView 中控件在屏幕的位置 |
2016-10-20 | Color 上线,支持函数生成 UIColor,及点语法设置背景色 | |
4.2.1 | 2016-10-22 | DictionaryModel 修复 NSString 值设置到 number 属性崩溃问题 |
4.3.0 | 2016-10-25 | FileManager 上线,支持快速移动文件 |
4.3.1 | 2016-11-02 | TableView 和CollectionView 数据源越界保护,由崩溃改为 log 输出。 |
5.0.0 | 2016-11-03 | YJCocoa 最低支持由 iOS6 升级到 iOS7 |
CoreData 上线,支持并发操作、自动保存、前台保存、后台保存以及数据库版本升级 | ||
NavigationBar 升级,支持自定义按钮 | ||
2016-11-06 | PerformSelector 移除类 YJNSPerformSelector | |
5.0.1 | 2016-11-08 | CollectionViewManager 修复 + (YJUICollectionCellCreate)cellCreate 失效错误 |
DictionaryModel 增加对NSURL属性的自动转换 | ||
5.0.2 | 2016-11-15 | cellModel 属性添加 __kindof 关键字 |
2016-12-02 | Http 修复锚点解析 | |
CollectionViewManager 中代理方法 collectionViewManagerloadingPageData 更名为 collectionViewManagerLoadingPageData | ||
2016-12-06 | CollectionViewManager 和CollectionViewManager 增加collectionView:didSelectItemAtIndexPath:数据源越界保护。 | |
2016-12-07 | CollectionViewManager 和CollectionViewManager 增加对Cell. reuseIdentifier属性的防空处理 | |
DictionaryModel 增加对NSURL和NSNumber属性相对于字典中数据的容错处理 | ||
5.1.0 | 2016-12-09 | URLSession 上线,大型APP网络架构,兼容任何一款网络SDK,并将其转化为面向对象请求,且支持断网重连 |
5.1.1 | 2016-12-14 | AOP 修复崩溃错误 |
2016-12-15 | CollectionViewManager 和TableViewManager 增加数据源越界保护 | |
2016-12-16 | TableViewManager 增加+ (YJUITableViewCellCreate)cellCreate 方法强制实现 | |
CollectionViewManager 和TableViewManager 增加重用标识符 | ||
修复部分警告代码 | ||
5.2.0 | 2016-12-19 | URLCode 上线,支持URLEncode 编码和 URDecode 解码 |
Http 接入 URLCode 库,增加参数 URLEncode 编码和 URDecode 解码的方法 | ||
5.3.0 | 2016-12-20 | Router 上线,是NavigationRouter的基础库 |
NavigationRouter 上线,主要用于实现项目组件化 | ||
5.4.0 | 2016-12-23 | ScrollViewManager 上线,支持监听UIScrollView的滚动状态 |
CollectionViewManager 接入 ScrollViewManager 库实现滑动监听和分页加载 | ||
TableViewManager 接入 ScrollViewManager 库实现滑动监听和分页加载 | ||
5.4.1 | 2016-12-26 | ScrollViewManager 支持设置边缘和边界提示区域 |
Router 和 NavigationRouter 架构升级 | ||
5.5.0 | 2016-12-28 | Router 支持Get 跳转 |
2017-01-04 | 修复 YJNSTimer 超边界计时 | |
2017-01-05 | Calendar 上线,支持快速将秒转换为天、时、分等 | |
Timer 接入 Calendar 做时间解析器 | ||
5.5.1 | 2017-01-09 | URLSession 架构升级,支持螺旋开发架构 |
6.0.0 | 2017-01-10 | Dispatch 增加创建 GCD 倒计时的方法 |
2017-01-10 | TimeProfiler 上线,支持抓取主线程耗性能的代码 | |
2017-01-11 | DeveloperTools 层上线,集成相关开发工具 | |
2017-01-12 | Swizzling 上线,支持随时随地交换方法。 | |
2017-01-13 | Leaks 上线,用于捕获项目中有内存泄漏的 UIViewController、UIView 和 Property 属性。 | |
6.0.1 | 2017-01-17 | Swizzling 和Leaks log 打印优化 |
2017-01-18 | Timer 倒计时 time=0 时自动失效,正计时去掉上限 | |
6.0.2 | 2017-02-04 | 修复 Http URLEncode 解析崩溃 |
6.1.0 | 2017-02-09 | TimeProfiler 支持直接打印主线程卡顿堆栈信息 |
PageView 架构升级 | ||
2017-02-12 | Swizzling 增加class方法交换 | |
2017-02-14 | URLSession 架构升级 | |
6.2.0 | 2017-03-01 | NavigationBar 修复部分机型启动崩溃错误 |
2017-03-02 | Singleton 性能优化,启用 pthread_mutex 锁 | |
2017-03-13 | Dispatch 增加pthread 锁架构 | |
2017-03-13 | Router 和 NavigationRouter 架构升级 | |
2017-03-13 | TimeProfiler 启用 RunLoop 监听主线程 | |
2017-03-13 | Singleton 增加单例宏 | |
2017-03-14 | DictionaryModel、Directory、Router、Swizzling、Timer、URLSession、CoreData、Leaks 和 TimeProfiler 库启用 Singleton 单例宏 | |
2017-03-15 | MemoryInfo 上线,主要用于获取运行过程中的 RAM 相关信息,如剩余内存。 | |
6.3.0 | 2017-03-28 | URLSession 崩溃修复 |
2017-03-31 | YJUIScrollViewManager 代理错误设置修复 | |
2017-04-17 | 在 Dispatch 中,将 __weakSelf 改为 @weakSelf,__strongSelf 改为 @strongSelf。 | |
2017-04-19 | 移除 CollectionViewManager 和 TableViewManager 中的同步和异步刷新 cell 的方法。 | |
2017-04-25 | TimeProfiler 增加页面分析器,控制台打印 VC 加载时间。 | |
6.4.0 | 2017-05-04 | 将 PageView 升级为 PageViewManager,主要实现对 UIPageViewController 的封装,支持轮播图、导航图、小说翻页等多种翻页模式。 |
6.5.0 | 2017-05-29 | 移除 TableViewManager 中的 cell 悬浮支持。 |
2017-06-02 | Leaks 增加白名单,可添加无需内存分析的类。 | |
2017-06-14 | Dispatch 增加新的方法 dispatch_async_default(dispatch_block_t block)。 | |
6.6.0 | 2017-07-19 | 移除 Dispatch 中的并发队列方法。 |
2017-07-21 | DictionaryModel 增加模型转换时根据外部属性 key 动态设置方法。 | |
7.0.0 | 2017-09-25 | 兼容 Xcode 9,消除警告提示。 |
7.1.0 | 2017-10-18 | Log 库升级,支持 iOS 11 控制台 NSArray 和 NSDictionary 的中文输出。 |
Router 和 NavigationRouter 架构升级,增加路由器的作用域控制,实现了热翻页效果。 | ||
8.0.0 | 2017-11-30 | 优化 strongSelf 宏,提示性能。 |
2017-12-13 | 升级支持最低版本为 iOS 8.0 和 Swift 4.0。 | |
增加 KVO 库,支持 block 回调和自动移除 Observer。 | ||
8.0.1 | 2018-04-16 | 移除 DEBUG 宏判断。 |
8.0.2 | 2018-04-19 | Leaks 忽略对 WK 前缀对象的内存泄漏分析。 |
8.1.0 | 2018-04-26 | URLSession 架构升级,支持指定线程返回数据和自定义数据模型转换。 |
2018-04-27 | NavigationRouter 和 Router 架构升级,支持外部依赖注入处理未注册的路由节点。 | |
8.2.0 | 2018-06-09 | TableViewManager 升级为 TableView 库,增加 YJUITableView 组件。 |
2018-06-10 | CollectionViewManager 升级为CollectionView 库,增加 YJUICollectionView 组件。PageViewManager 升级为 PageView 库,增加 YJUIPageViewController 组件。 | |
2018-06-11 | NSNotificationCenter 正式上线,主要用于 block 回调通知,并支持自动释放。 | |
2018-06-13 | 修复 URLSession 的相关 bug。 | |
2018-06-16 | Dispatch 增加新的宏 strongSelfReturn,支持 self 不存在时直接返回默认值。 |
版权
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974