当前位置: 首页 > article >正文

【OC】七大多界面传值总结

【OC】多界面传值总结文章目录【OC】多界面传值总结属性传值(A-B)代理传值(B-A)Block传值B-A通知传值任意KVO传值任意单例传值NSUserDefaults 传值总结与 Trade-off 对比快速对照表详细 Trade-off 分析在学习iOS 开发的知识过程中把几种常见的多界面传值方式梳理了一下记录在这里方便以后回顾属性传值(A-B)这是一种正向传值也是最简单的一种就是从 A 界面跳转到 B 界面的时候把数据直接塞给 B思路在 B 控制器里定义一个属性跳转之前给它赋值B 拿到之后用就行了接收方B// SecondViewController.h#importUIKit/UIKit.hinterfaceSecondViewController:UIViewControllerproperty(nonatomic,copy)NSString*receiveStr;end// SecondViewController.m-(void)viewDidLoad{[superviewDidLoad];// 直接用 receiveStr 就行NSLog(%,self.receiveStr);self.titleLabel.textself.receiveStr;}发送方A// FirstViewController.m-(void)jumpToSecond{// 创建第二个视图并为其赋值来达到跨界面传值的效果SecondViewController*secondVC[[SecondViewController alloc]init];secondVC.receiveStr我是从第一个界面传来的;[self.navigationController pushViewController:secondVC animated:YES];}这个最简单正向传没啥问题但是反向传B → A就不行了代理传值(B-A)这是一种反向传值比如从 B 把数据传回给 A思路B 里面定义一个协议A 来遵守这个协议B 在需要传值的时候调用代理方法A 实现这个方法拿数据接收方A// FirstViewController.m// 遵守协议interfaceFirstViewController()SecondVCDelegateend// 跳转的时候设置代理-(void)jumpToSecond{SecondViewController*secondVC[[SecondViewController alloc]init];secondVC.delegateself;// secondVC的代理是我自己所以实现代码也在我这里写更改的UI也是我[self.navigationController pushViewController:secondVC animated:YES];}// 实现代理方法-(void)sendData:(NSString*)data{NSLog(B 传回来的数据%,data);self.label.textdata;// secondVC调用的协议方法在我这里实现的所以我可以修改我的界面数据而使用的数据是secondVC传回来的}发送方B// SecondViewController.h#importUIKit/UIKit.h// 定义协议protocolSecondVCDelegateNSObject-(void)sendData:(NSString*)data;endinterfaceSecondViewController:UIViewController// 代理属性用 weak 防止循环引用property(nonatomic,weak)idSecondVCDelegatedelegate;end// SecondViewController.m// 点击按钮传值回去-(void)sendBtnClick{if([self.delegate respondsToSelector:selector(sendData:)]){[self.delegate sendData:这是从 B 传回来的数据];// 协议的实现细节由A决定我只用使用协议方法就好}[self.navigationController popViewControllerAnimated:YES];}Block传值B-ABlock 传值和代理传值效果差不多也是反向传但是写起来比代理简洁很多思路B 里面定义一个 block 属性A 跳转到 B 之前给这个 block 赋值实现具体逻辑B 在合适的时候调用这个 block 把数据传出去发送方B// SecondViewController.h#importUIKit/UIKit.hinterfaceSecondViewController:UIViewController// 这里的block其实和属性传值有点相像都是由A进行赋值// 但是由于block的捕获特性在 A 处写好代码捕获 A 的变量// 存到 B 的属性里等 B 需要时调用代码却在 A 的上下文里执行从而修改 A 的数据property(nonatomic,copy)void(^SendDataBlock)(NSString*data);end// SecondViewController.m-(void)sendBtnClick{// 调用 block 传数据if(self.SendDataBlock){// 先判断是否为nilself.SendDataBlock(这是 Block 传回来的数据);}[self.navigationController popViewControllerAnimated:YES];}接收方A// FirstViewController.m-(void)jumpToSecond{SecondViewController*secondVC[[SecondViewController alloc]init];// 给 block 赋值在这里写好回调逻辑secondVC.SendDataBlock^(NSString*data){NSLog(Block 收到数据%,data);self.label.textdata;};[self.navigationController pushViewController:secondVC animated:YES];}⚠️注意循环引用block 里面用了self如果secondVC也强引用了 A就会形成循环引用所以最好通过弱引用打破循环引用__weaktypeof(self)weakSelfself;secondVC.sendBlock^(NSString*data){NSLog(Block 收到数据%,data);weakSelf.label.textdata;};通知传值任意通知这个机制比较灵活不只是两个界面之间一对多都可以适合那种不好直接建立联系的两个模块之间通信思路发通知的地方 post监听的地方 addObserver然后处理就行接收方比如 A先注册监听-(void)viewDidLoad{[superviewDidLoad];// 一对多的关键就在于任何一个对象都可以注册监听通过对应的通知名称来获取信息// 注册通知[[NSNotificationCenter defaultCenter]addObserver:selfselector:selector(receiveNotification:)name:SendDataNotification// 通知名称通过该id来接受object:nil];// object可以指定接受某一种对象的通知}// 接收到通知的处理方法-(void)receiveNotification:(NSNotification*)notification{// 携带的数据NSString*datanotification.userInfo[data];// 发送者谁发的id sendernotification.object;// 通知名称NSString*namenotification.name;// 更新UIself.label.textdata;}// 记得移除不然会出问题-(void)dealloc{[[NSNotificationCenter defaultCenter]removeObserver:self];}发送方B发通知// 携带的数据NSDictionary*userInfo{avatar:selectedImage,message:头像已更新};// 发送通知[[NSNotificationCenter defaultCenter]postNotificationName:SendDataNotificationobject:self// 可以传输一个对象自定义类userInfo:userInfo// 可以传输一个字典];接收方C[[NSNotificationCenter defaultCenter]addObserver:selfselector:selector(onUserLogin:)name:SendDataNotificationobject:nil];-(void)onUserLogin:(NSNotification*)notification{NSLog(TabBar更新用户相关的 tab 图标);[selfupdateUserTabIcon];}‼️dealloc里面一定要removeObserver不然注册了但控制器销毁了再收到通知会崩通知滥用的话代码逻辑会很乱不好追踪所以能用代理就用代理通知用来处理那种远距离的通信KVO传值任意KVOKey-Value Observing严格来说不算传值更像是观察某个对象属性的变化当被观察的属性值改变时观察者会自动收到通知比喻你订阅了一个人的微博他每次发新动态系统自动推送给你的手机思路A 观察 B 的某个属性B 的属性一变A 就知道了被观察的对象B 里有一个属性// SecondViewController.hproperty(nonatomic,copy)NSString*observeStr;A 添加观察-(void)viewDidLoad{[superviewDidLoad];// 假设 self.secondVC 是持有的 B 对象[self.secondVC addObserver:selfforKeyPath:observeStroptions:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld// 告诉系统你要什么信息// NSKeyValueObservingOptionNew 提供变化后的新值// NSKeyValueObservingOptionOld 提供变化前的旧值// NSKeyValueObservingOptionInitial 注册时立即调用一次回调// NSKeyValueObservingOptionPrior 变化前和变化后各调用一次context:nil];}// 属性变化时会调这个方法-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context{if([keyPath isEqualToString:observeStr]){NSString*newValuechange[NSKeyValueChangeNewKey];// change[NSKeyValueChangeOldKey]旧值// change[NSKeyValueChangeNewKey]新值// change[NSKeyValueChangeKindKey]变化类型设置/插入/删除NSLog(observeStr 变了新值是%,newValue);}}// 移除观察不然会崩-(void)dealloc{[self.secondVC removeObserver:selfforKeyPath:observeStr];}B 那边改属性值// 直接改KVO 会自动触发self.observeStr新的数据;KVO 感觉平时用的不多一般在需要监听 model 属性变化的时候会用界面传值用这个稍微有点绕‼️记得remove只要你能拿到一个对象的引用你就可以监听它的属性变化属性是用property声明的property自动生成了会触发 KVO 的 setter 方法特性代理/Block/通知KVO触发方式主动调用属性变化自动触发需要写调用代码吗需要[self.delegate xxx]不需要属性赋值自动触发被监听对象知道有监听者吗知道delegate属性不知道完全解耦单例传值单例严格来说也不算传值更像是搞了一个全局共享的数据容器谁都能读谁都能写适合那种多个界面都需要访问同一份数据的场景比如用户信息、购物车、全局配置之类的思路创建一个单例类把需要共享的数据放进去任何界面都通过这个单例来存取数据不用在界面之间互相传DataManager.h单例类#importFoundation/Foundation.hinterfaceDataManager:NSObjectproperty(nonatomic,copy)NSString*shareData;property(nonatomic,strong)NSMutableArray*dataList;// 获取单例的类方法(instancetype)sharedManager;endDataManager.m#importDataManager.himplementationDataManager(instancetype)sharedManager{staticDataManager*instancenil;staticdispatch_once_t onceToken;// dispatch_once 保证这段代码只执行一次线程安全dispatch_once(onceToken,^{instance[[DataManager alloc]init];instance.dataList[NSMutableArray array];});returninstance;}enddispatch_once是关键保证多线程情况下也只会创建一个实例不会出现创建多个的情况。A 界面写入数据-(void)saveData{[DataManager sharedManager].shareData存进单例的数据;[[DataManager sharedManager].dataList addObject:item1];}B 界面读取数据不需要 A 传直接自己取-(void)viewDidLoad{[superviewDidLoad];NSString*data[DataManager sharedManager].shareData;NSLog(从单例拿到的数据%,data);self.label.textdata;}单例的优点是用起来特别方便任何地方都能直接取不用关心调用链但缺点也很明显数据是全局的随便哪里都能改出了问题很难排查是谁改的另外单例的生命周期是整个 App数据不用了也不会自动释放要注意内存NSUserDefaults 传值UserDefaults 是系统提供的一个轻量级持久化方案数据写进去之后即使 App 重启也还在严格来说这也不是传值更像是存值但多界面共享数据的时候也会用到思路把数据写到 UserDefaults任何界面任何时候都能读出来而且数据是持久化的写入数据A 界面-(void)saveToUserDefaults{NSUserDefaults*defaults[NSUserDefaults standardUserDefaults];// 支持的基础类型[defaults setObject:存进去的字符串forKey:myDataKey];[defaults setInteger:18forKey:ageKey];[defaults setBool:YES forKey:isLoginKey];// 写完最好同步一下保证立刻写入磁盘// iOS 7 之后其实会自动同步但手动调一下更保险[defaults synchronize];}读取数据B 界面甚至 App 重启后也能读到-(void)loadFromUserDefaults{NSUserDefaults*defaults[NSUserDefaults standardUserDefaults];NSString*data[defaults objectForKey:myDataKey];NSInteger age[defaults integerForKey:ageKey];BOOL isLogin[defaults boolForKey:isLoginKey];NSLog(data%, age%ld, isLogin%d,data,(long)age,isLogin);}存复杂对象比如自定义 modelUserDefaults 不能直接存自定义对象要先序列化成 NSData// NSData 就是把任何数据图片、文件、字符串等转换成二进制数据装进一个盒子里// 存需要 model 遵守 NSCoding 协议MyModel*model[[MyModel alloc]init];model.nametest;NSData*data[NSKeyedArchiver archivedDataWithRootObject:model];[[NSUserDefaults standardUserDefaults]setObject:data forKey:modelKey];// 取NSData*savedData[[NSUserDefaults standardUserDefaults]objectForKey:modelKey];MyModel*savedModel[NSKeyedUnarchiver unarchiveObjectWithData:savedData];删除数据[[NSUserDefaults standardUserDefaults]removeObjectForKey:myDataKey];UserDefaults 适合存用户偏好设置、登录状态、上次选择的选项这类小数据‼️不适合存大数据UserDefaults 本质上是个 plist 文件太大会影响性能也不适合存敏感信息不加密直接明文要存密码之类的用 Keychain启动时全量加载UserDefaults 对应的 plist 文件在 App 启动时会整个读进内存不是按需读取所以文件越大启动越慢特性单例NSUserDefaults数据存储位置内存硬盘磁盘App 关闭后数据❌ 消失✅ 还在使用场景临时全局数据需要保存的用户设置能存什么任何对象基础类型自定义对象和UIImage要转换成NSData速度快内存慢一点读写硬盘总结与 Trade-off 对比快速对照表传值方式传值方向是否持久化适用场景属性传值A → B 正向否相邻界面正向传简单数据代理传值B → A 反向否反向传回调逻辑多时Block 传值B → A 反向否反向传代码简洁通知传值任意方向否跨模块一对多广播KVO 传值观察属性变化否监听 model 层数据变化变化自动调用单例传值任意方向否内存全局共享数据多界面共用UserDefaults任意方向是用户偏好、登录态等小数据详细 Trade-off 分析属性传值✅ 最简单直观代码少一看就懂❌ 只能正向反向传不了❌ 强依赖A 需要 import BA 和 B 耦合在一起代理传值✅ 反向传值的经典方案UIKit 里大量使用是 Apple 推荐的模式✅ 协议定义清晰接口明确可以有多个方法❌ 写起来最繁琐要定义协议、声明属性、遵守协议、实现方法步骤多❌ 只能一对一一个 delegate 只有一个对象接收Block 传值✅ 写起来比代理简洁很多回调逻辑就写在跳转旁边上下文清晰✅ 也是反向传适合一次性的回调场景❌ 如果回调逻辑很复杂block 里嵌套一堆东西可读性会变差block 地狱❌ 也是一对一没法多个地方同时接收通知传值✅ 完全解耦发送方和接收方互相不知道对方存在✅ 支持一对多可以跨任意层级传值不受界面层级限制❌ 太灵活了反而是缺点滥用之后代码逻辑很难追踪不知道谁发的谁在收❌ 通知名字是字符串写错了不报错运行时才发现收不到KVO 传值✅ 不需要被观察方主动发数据属性一变自动触发✅ 适合做数据绑定model 变了 view 自动更新❌ keyPath 是字符串写错了也是运行时才发现用于界面传值很绕❌ 忘记 removeObserver 必崩而且错误信息不友好单例传值✅ 用起来极方便任何地方直接[DataManager sharedManager].xxx拿数据✅ 适合真正全局共享的数据比如用户信息、购物车❌ 数据是全局的谁都能改出了 bug 很难定位是哪里改的❌ 生命周期等于 App 生命周期数据不会自动释放有内存压力UserDefaults 传值✅ 数据持久化App 重启还在这是其他方式没有的✅ 用起来也很简单API 直观❌ 数据明文存储不安全不能存密码、token 这类敏感信息用 Keychain❌ 不适合频繁读写每次都是 IO 操作存大数据会拖慢启动

相关文章:

【OC】七大多界面传值总结

【OC】多界面传值总结文章目录【OC】多界面传值总结属性传值(A->B)代理传值(B->A)Block传值(B->A)通知传值(任意)KVO传值(任意)单例传值NSUserDefaults 传值总结与 Trade-off 对比快速对照表详细 …...

数据主权时代:如何构建个人专属的数字记忆银行

数据主权时代:如何构建个人专属的数字记忆银行 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...

Renesas RZ/G3E处理器:工业HMI与边缘AI的异构计算方案

1. Renesas RZ/G3E处理器概述Renesas RZ/G3E是瑞萨电子RZ/G系列SoC的最新成员,专为中端人机界面(HMI)系统设计,特别针对需要AI加速的工业应用场景。这款处理器采用异构计算架构,集成了高性能应用处理器、实时控制核心和专用神经网络处理单元&…...

翰墨续千年 李体书法风华 20米长卷铸就当代临帖巅峰

近日,李体书法创始人李送文先生倾尽毕生书法造诣,沉淀数十年深耕底蕴,日夜凝神潜心淬炼,倾力创作二十米恢弘《九成宫醴泉铭》巨幅临帖长卷,以超凡笔墨风骨传承盛唐经典,以独树一帜书韵惊艳当代书坛。泱泱华…...

Arm超分辨率技术解析与移动端优化实践

1. Arm Accuracy Super Resolution技术解析1.1 超分辨率技术基础原理超分辨率技术的本质是通过算法手段突破传感器硬件的物理限制,从低分辨率(LR)输入中重建出高分辨率(HR)图像。传统插值方法如双三次(bicubic)仅通过相邻像素加权计算新像素值,而现代基于…...

还在手动逐字转写录音?2026年这4款AI工具,1分钟教会你如何把录音转成文字

开完会被要求下班前整理完1小时会议纪要?蹲在会议室逐字听录音,熬到九点还改不完错漏?做学术访谈录了两小时方言,转写工具出来全是乱码,大半天时间耗在返工上?这些问题在今天已经有了更好的解法。我前后测评…...

Windows右键菜单高效管理方案:从杂乱到精简的完整指南

Windows右键菜单高效管理方案:从杂乱到精简的完整指南 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否厌倦了Windows右键菜单的混乱不堪&#…...

RelayPlane Proxy:本地AI成本管家,智能路由与预算管控实战

1. 项目概述:一个为AI开发者而生的本地成本管家如果你和我一样,每天都在用Claude Code、Cursor或者各种AI Agent框架写代码、做分析,那你肯定对月底的API账单感到过“肉疼”。尤其是当你的Agent在后台不知疲倦地调用Opus或者GPT-4o来处理一些…...

FPGA+USB3.0工业相机:开源硬件设计、图像处理与高速传输实战

1. 项目概述:当工业相机遇上FPGA与USB3.0最近在捣鼓一个挺有意思的开源项目,来自GitHub上的circuitvalley/USB_C_Industrial_Camera_FPGA_USB3。光看这名字,信息量就很大了:一个基于USB Type-C接口的工业相机,核心是FP…...

wechatbot云端微信SAAS框架使用教程,轻松实现微信登录,微信消息调度,微信群管理,微信联系人管理,定时任务!

1. 登录模块(首次使用) 这是使用系统的第一步,核心流程如下: 获取二维码:调用 POST /getLoginQrCode 接口。您需要传入 AUTHORIZATION(从官网获取)、设备类型(type,推荐 …...

Universal x86 Tuning Utility技术架构深度解析:跨平台硬件调优实现原理与工程实践

Universal x86 Tuning Utility技术架构深度解析:跨平台硬件调优实现原理与工程实践 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuni…...

Docker 安装 数据库工单系统Yearning以及使用

文档以及部署 什么是Yearning? 一个强大且本地部署的平台,专为数据库管理员(DBA)和开发人员设计,提供无缝的SQL检测和查询审计。专注于隐私和效率,为MYSQL审计提供直观且安全的环境。 功能 AI 助手:我…...

2026年AI外呼系统技术深度解析:大脚丫通讯全链路闭环方案技术复盘

本文从技术架构角度深度分析主流AI外呼系统核心能力模块,重点对大脚丫通讯的全链路闭环方案进行技术复盘,涵盖ASR/NLP/TTS/预测拨号算法/CRM集成架构六大维度,并提供面向中小企业的技术选型框架与横向数据对比。一、AI外呼系统三层技术架构技…...

终极指南:如何用Whisky在Apple Silicon Mac上原生运行Windows程序

终极指南:如何用Whisky在Apple Silicon Mac上原生运行Windows程序 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 作为一名macOS用户,你是否曾为某个Windows专…...

G-Helper终极指南:华硕笔记本轻量化硬件控制工具

G-Helper终极指南:华硕笔记本轻量化硬件控制工具 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertb…...

Vinkius MCP Catalog:终结AI开发工具配置混乱,实现MCP服务器统一管理

1. 项目概述:一个AI开发者的“配置地狱”与救赎如果你和我一样,深度使用多个AI辅助编程工具——比如在Claude Desktop里查文档,在Cursor里重构代码,在Windsurf里写SQL,再用GitHub Copilot补全注释——那你一定对“MCP配…...

XUnity.AutoTranslator终极指南:5分钟破解Unity游戏语言壁垒

XUnity.AutoTranslator终极指南:5分钟破解Unity游戏语言壁垒 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂日文RPG、英文独立游戏而苦恼吗?XUnity.AutoTranslator作…...

3分钟搞定:如何用Blender 3MF插件完美处理3D打印文件

3分钟搞定:如何用Blender 3MF插件完美处理3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 还在为Blender模型无法直接用于3D打印而烦恼吗&#xff…...

人类唯一无法被AI替代的是什么

上周刷到一个视频,郭宇的访谈。 郭宇是谁你可能不知道。但如果你2011年到2014年用过支付宝年度账单,那个东西是他写的。后来他创业被字节跳动收购,成了字节前200个工程师之一。2015年冲绳的年会上,张楠和一鸣聊起说李克强把4G资费打下来了,也许可以做做视频推荐。那个聊出…...

GPT Image 2 本地部署完全指南:2026年从API接入到自建服务的实测教程

目前国内用户想快速体验GPT Image 2的图片生成能力,最省心的方式是通过聚合平台KULAAI(https://ly.877ai.cn)直接调用,无需配置API Key和服务器环境。但如果你需要将GPT Image 2集成到自己的产品中,本地部署和API接入仍…...

BingGPT桌面客户端:基于Electron的New Bing跨平台效率工具详解

1. 项目概述与核心价值 最近在折腾AI工具的朋友,估计都绕不开微软的New Bing。它集成了GPT-4的能力,还能联网搜索,用起来确实比纯文本的ChatGPT在某些场景下更顺手。但说实话,每次都要打开浏览器,还得是Edge&#xff…...

全能清理:2345清理王功能全景解析

手机用久了,难免会卡顿,会产生很多垃圾文件。这时候,一款好用的清理APP就显得尤为重要。今天给大家推荐的这款2345清理王,就是一款专业的手机清理APP,功能丰富,效果明显,比系统自带的好用太多了…...

ARM Cortex-A7内存系统架构与优化实践

1. ARM Cortex-A7内存系统架构概览Cortex-A7作为ARMv7-A架构中的经典低功耗处理器,其内存子系统设计体现了现代嵌入式处理器的典型优化思路。L1缓存采用分离式指令/数据设计(哈佛架构),指令侧最大支持64KB 2路组相联VIPT缓存&…...

为AI智能体集成短信能力:Sendly Skills实战指南

1. 项目概述:为AI智能体赋予通信能力如果你正在开发一个AI智能体,无论是用于客户服务、自动化通知还是内部工作流,让它能够发送短信、验证手机号,这听起来是个很酷的功能,但实操起来却是一堆麻烦事。你得自己去对接短信…...

Java 代码质量工具的集成与实践:提升代码质量的全面指南

Java 代码质量工具的集成与实践:提升代码质量的全面指南 核心概念 Java 代码质量工具的集成与实践是确保代码质量的重要环节,它涉及到将代码质量工具集成到开发流程中,通过自动化的方式检测和修复代码中的问题。常用的 Java 代码质量工具包括…...

当敏捷遇到CMMI合规压力:AISMM模型给出第三条路(金融/医疗行业已强制要求2025Q1前完成对标)

更多请点击: https://intelliparadigm.com 第一章:当敏捷遇到CMMI合规压力:AISMM模型给出第三条路 在传统软件工程实践中,敏捷方法强调快速迭代与响应变化,而CMMI则聚焦于过程稳定性、可重复性与组织级成熟度。二者目…...

RTL8821CU无线网卡Linux驱动:5分钟解决Linux无线连接难题

RTL8821CU无线网卡Linux驱动:5分钟解决Linux无线连接难题 【免费下载链接】rtl8821CU Realtek RTL8811CU/RTL8821CU USB Wi-Fi adapter driver for Linux 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8821CU 你是否在Linux系统上使用RTL8821CU无线网卡时…...

宏智树AI:从大纲到定稿,一个平台完成你的论文写作闭环

官网:www.hzsxueshu.com 你有没有经历过这样的场景:打开Word,光标在空白页上闪了十分钟,一个字也写不出来;好不容易憋出一段文献综述,导师问“这些文献你都看过吗”,你支支吾吾;数据…...

最新梅花易数排盘工具 数字+时间起卦精准适配 东方智慧与AI解卦源码

这款纯后端梅花易数排盘工具,严格依照传统梅花易数数字起卦法与时间起卦法开发,无繁杂前端界面,主打轻量高效、排盘精准、支持二次开发,现免费开源分享。 工具亮点 1. 严格遵循梅花易数古法,输入数字或时间戳即可快速…...

Python量化分析库EigenLedger:一站式投资组合绩效评估与优化工具

1. 项目概述:EigenLedger,一个为投资者赋能的Python量化分析库如果你是一名金融从业者、量化爱好者,或者只是一个希望对自己的投资组合有更深入理解的个人投资者,那么你很可能已经对市面上那些庞大而复杂的金融分析工具感到头疼。…...