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

IOS界面传值-OC

1、页面跳转

由 ViewController 页面跳转至 NextViewController 页面

(1)ViewController

  • ViewController.h
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end

  • ViewController.m
#import "ViewController.h"
#import "NextViewController.h"@interface ViewController ()@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UIButton *button;@end@implementation ViewController//懒加载 UILabel
-(UILabel *) label{if (_label == nil) {_label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 50)];_label.backgroundColor = [UIColor blackColor];_label.textColor = [UIColor whiteColor];_label.font = [UIFont systemFontOfSize:20];}return _label;
}//懒加载 UIButton
-(UIButton *) button{if (_button == nil) {_button = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 200, 50)];_button.backgroundColor = [UIColor redColor];//setTitle:forState: 是 UIButton 的方法,允许你为按钮的不同状态设置不同的标题//为按钮在 普通状态 (UIControlStateNormal) 下设置标题为 "跳转至下个页面"[_button setTitle:@"跳转至下个页面" forState:UIControlStateNormal];//setTitleColor:forState: 是 UIButton 的方法,允许你为不同状态下的按钮标题设置不同的颜色//为按钮在 触摸抬起 (UIControlEventTouchUpInside) 事件时,设置标题颜色为白色 ([UIColor whiteColor])[_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];//点击事件//addTarget:action:forControlEvents://target: 触发事件时的目标对象。通常是 self,即当前类的实例//action: 事件触发时调用的方法的 选择器,通过 @selector 来指定方法//forControlEvents: 指定触发事件的类型//UIControlEventTouchUpInside 按钮的 触摸抬起 事件[_button addTarget:self action:@selector(zlzButtonClick) forControlEvents:UIControlEventTouchUpInside];}return _button;
}//按钮点击事件
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}/**•    viewDidLoad:视图加载后,初始化视图。•    viewWillAppear::视图即将显示,准备更新 UI。•    viewDidAppear::视图已显示,启动交互或动画。•    viewWillDisappear::视图即将隐藏,保存数据。•    viewDidDisappear::视图已隐藏,释放资源或暂停任务。**///视图加载
- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor greenColor];NSLog(@"First viewDidLoad");//添加控件至根View[self.view addSubview:self.label];[self.view addSubview:self.button];
}-(void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];NSLog(@"------First viewWillAppear");
}- (void)viewWillLayoutSubviews{[super viewWillLayoutSubviews];NSLog(@"------First viewWillLayoutSubviews");
}- (void)viewDidLayoutSubviews{[super viewDidLayoutSubviews];NSLog(@"------First viewDidLayoutSubviews");
}- (void)viewDidAppear:(BOOL)animated{[super viewDidAppear:animated];NSLog(@"------First viewDidAppear");
}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];NSLog(@"------First viewWillDisappear");
}- (void)viewDidDisappear:(BOOL)animated{NSLog(@"------First viewDidDisappear");
}@end

(2)NextViewController

  • NextViewController.h
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface NextViewController : UIViewController@endNS_ASSUME_NONNULL_END
  • NextViewController.m

#import "NextViewController.h"@interface NextViewController ()@property (strong, nonatomic) UITextField *textFiled;
@property (strong, nonatomic) UIButton *button;@end@implementation NextViewController-(UITextField *)textFiled{if (_textFiled == nil) {_textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];_textFiled.textColor = [UIColor blackColor];_textFiled.borderStyle = UITextBorderStyleLine;}return _textFiled;
}-(UIButton *) button{if (_button == nil) {_button = [[UIButton alloc]initWithFrame:CGRectMake(100, 400, 200, 50)];_button.backgroundColor = [UIColor redColor];[_button setTitle:@"返回上一个页面" forState:UIControlStateNormal];[_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];//点击事件[_button addTarget:self action:@selector(zlzBackClick) forControlEvents:UIControlEventTouchUpInside];}return _button;
}-(void)zlzBackClick{// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}- (void)viewDidLoad {[super viewDidLoad];NSLog(@"------Second viewDidLoad");self.view.backgroundColor = [UIColor yellowColor];[self.view addSubview:self.textFiled];[self.view addSubview:self.button];
}- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];NSLog(@"------Second viewWillAppear");
}- (void)viewWillLayoutSubviews{[super viewWillLayoutSubviews];NSLog(@"------Second viewWillLayoutSubviews");
}- (void)viewDidLayoutSubviews{[super viewDidLayoutSubviews];NSLog(@"------Second viewDidLayoutSubviews");
}- (void)viewDidAppear:(BOOL)animated{[super viewDidAppear:animated];NSLog(@"------Second viewDidAppear");
}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];NSLog(@"------Second viewWillDisappear");
}- (void)viewDidDisappear:(BOOL)animated{NSLog(@"------Second viewDidDisappear");
}@end

2、界面传值

2.1、属性传值

  • 在 NextViewController.h 添加属性 str
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface NextViewController : UIViewController//属性传值
@property (nonatomic, strong) NSString *str;@endNS_ASSUME_NONNULL_END

  • 在 ViewController.m 的跳转点击事件中 为NextViewController中的属性str 赋值
//按钮点击事件
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//属性传值---传递nextVC.str = @"属性传值";//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 中 textFiled 懒加载时赋值
-(UITextField *)textFiled{if (_textFiled == nil) {_textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];_textFiled.textColor = [UIColor blackColor];_textFiled.borderStyle = UITextBorderStyleLine;//属性传值---接收并显示_textFiled.text = self.str;}return _textFiled;
}

  • 效果

2.2、单例传值

(1)创建单例

  • DefaultInstance.h

#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface DefaultInstance : NSObject+(instancetype)getInstance;@property (nonatomic, strong) NSString *instanceStr;@endNS_ASSUME_NONNULL_END

  • DefaultInstance.m

#import "DefaultInstance.h"@implementation DefaultInstance//类方法---创建单例对象
+(instancetype)getInstance{//首次创建会 将 sharedVC 赋值为 nil,然后创建一个对象//非首次都会直接返回上次的值static DefaultInstance *instance = nil;if (instance == nil) {instance = [[DefaultInstance alloc]init];}return instance;
}@end

(2)正向传值

  • 在 ViewController.m 的跳转点击事件,为单例的属性值赋值
//按钮点击事件
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//单例传值---正向传递[DefaultInstance getInstance].instanceStr = @"单例传值";//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 的 textFiled懒加载时赋值
-(UITextField *)textFiled{if (_textFiled == nil) {_textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];_textFiled.textColor = [UIColor blackColor];_textFiled.borderStyle = UITextBorderStyleLine;//单例传值---接收并显示_textFiled.text = [DefaultInstance getInstance].instanceStr;}return _textFiled;
}

  • 效果

(3)反向传值

  • 在 NextViewController.m 的返回点击事件中,为单例中的属性赋值
-(void)zlzBackClick{//单例传值---反向传递NSLog(@"单例传值---反向传递: %@",self.textFiled.text);[DefaultInstance getInstance].instanceStr = self.textFiled.text;// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 的 viewWillAppear() 方法中,获取单例属性值并展示
-(void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];NSLog(@"------First viewWillAppear");//单例传值---反向接收并展示NSLog(@"单例传值---反向接收并展示:%@", [DefaultInstance getInstance].instanceStr);self.label.text = [DefaultInstance getInstance].instanceStr;
}

  • 效果

2.3、NSUserDefaults传值

NSUserDefaults传值与单例传值类似,区别是单例传值是在内存中创建单例,而NSUserDefaults 则是在磁盘文件中的。

(1)正向传值

  • 在 ViewController.m 中的跳转点击事件中将值写入文件
//按钮点击事件
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//NSUserDefaults-正向传值(存入磁盘文件)[[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults传值" forKey:@"zlzKey"];//写入[[NSUserDefaults standardUserDefaults] synchronize];//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 的 textFiled 懒加载时赋值
-(UITextField *)textFiled{if (_textFiled == nil) {_textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];_textFiled.textColor = [UIColor blackColor];_textFiled.borderStyle = UITextBorderStyleLine;//NSUserDefaults传值---接受并显示(从磁盘文件中读取)_textFiled.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzKey"];}return _textFiled;
}

  • 效果

(2)反向传值

  • 在 NextViewController.m 中的返回点击事件中将值写入文件
-(void)zlzBackClick{//NSUserDefaults传值---反向传递NSLog(@"NSUserDefaults传值---反向传递:%@", self.textFiled.text);[[NSUserDefaults standardUserDefaults] setObject:self.textFiled.text forKey:@"zlzBackKey"];[[NSUserDefaults standardUserDefaults] synchronize];// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 中的 viewWillAppear() 方法中获取文件中的值
-(void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];NSLog(@"------First viewWillAppear");//NSUserDefaults传值---反向接收并展示NSLog(@"NSUserDefaults---反向接收并展示:%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzBackKey"]);self.label.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzBackKey"];
}

  • 效果

2.4、代理传值

  • 代理传值主要应用于反向传值,即本示例中 NextViewController -> ViewController 传值
  • 委托方:NextViewController
  • 代理方:ViewController

(1)委托方 NextViewController 定义协议

  • 在 NextViewController.h 中创建协议

#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN//委托方定义协议
@protocol zlzPassValueDelegate <NSObject>//协议定义一个方法
-(void)passValue:(NSString*)value;@end@interface NextViewController : UIViewController//属性传值
@property (nonatomic, strong) NSString *str;//定义一个持有协议的id指针
//weak是为了防止指针循环引用
@property (weak)id<zlzPassValueDelegate> zlzDelegate;@endNS_ASSUME_NONNULL_END

  • 在 NextViewController.m 中调用协议方法
-(void)zlzBackClick{//代理传值---反向传递[self.zlzDelegate passValue:self.textFiled.text];// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}

(2)代理方 ViewController 实现协议方法

  • 在 ViewController.m 中实现协议方法
#import "ViewController.h"
#import "NextViewController.h"@interface ViewController ()<zlzPassValueDelegate>   //遵守协议@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UIButton *button;@end@implementation ViewController//...省略部分代码//代理传值---实现协议方法
-(void)passValue:(NSString *)value{self.label.text = value;
}@end

(3)绑定代理关系

  • 在 ViewController.m 的跳转点击事件中,设置 NextViewController 的代理是自己

//按钮点击事件
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//代理传值---设置代理关系nextVC.zlzDelegate = self;//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}

2.5、block传值

block传值与代理传值有点类似,也是主要应用于反向传值,但是使用起来比代理传值要简单。

  • 在 NextViewController.h 中定义 block
#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface NextViewController : UIViewController//属性传值
@property (nonatomic, strong) NSString *str;// 定义一个 block 进行页面反向传值
//copy属性是为了防止 block 循环引用
//block就是一个属性
//^就是block的标志
@property (copy) void (^zlzBlock)(NSString*);@endNS_ASSUME_NONNULL_END
  • 在 NextViewController.m 中的返回点击事件中调用 block 方法
-(void)zlzBackClick{//block传值---反向传递self.zlzBlock(self.textFiled.text);// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 中的跳转点击事件中实现 属性 block
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//block传值---实现block-接收来自页面2的值nextVC.zlzBlock = ^(NSString *value){self.label.text = value;};//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}

2.6、通知传值

通知传值更灵活,主要用于跨页面跳转时。

类似于Android中的广播。

(1)接收方 ViewController

  • 在 ViewController.m 的跳转点击事件中,设置通知监听
-(void)zlzButtonClick{NextViewController *nextVC = [[NextViewController alloc]init];//NextViewController 需要全屏展示nextVC.modalPresentationStyle = UIModalPresentationFullScreen;//通知传值---添加监听,等待页面2的传值//addObserver:self 添加监听者为自己//通知的名称zlzNotify//object:nil 表示所有的发送者,只要是名为zlzNotify通知的都监听接收[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealWithNotify:) name:@"zlzNotify" object:nil];//presentViewController:animated:completion://viewControllerToPresent: 需要展示的视图控制器//animated: 是否使用动画过渡//completion: 动画完成后的回调,可以是 nil[self presentViewController:nextVC animated:YES completion:nil];
}//接收到通知后的处理---参数1:通知
-(void)dealWithNotify:(NSNotification*)notification{self.label.text = notification.userInfo[@"zlzNotificationKey"];
}

(2)发送方 NextViewController

  • 在 NextViewController.m 的返回点击事件中发送通知
-(void)zlzBackClick{//通知传值---发送通知//object:nil表示群发[[NSNotificationCenter defaultCenter]postNotificationName:@"zlzNotify" object:nil userInfo:@{@"zlzNotificationKey":self.textFiled.text}];// dismissViewControllerAnimated:animated:completion://用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器//completion:nil:表示关闭完成后执行的回调[self dismissViewControllerAnimated:YES completion:nil];
}

3、总结

属性传值简单的正向传值,不能跨页面传值
单例传值可以正向反向传值,可以跨页面,但是需要创建一个单例对象
NSUserDefaults传值类似单例传值,区别是单例传值是把值写入内存,而它是把值写入沙盒文件
代理传值主要用于反向传值,一对一,必须两个页面建立代理关系
block传值

主要用于反向传值,一对一

代理传值能做的它都能做,但他不能取代代理传值

通知传值可以跨页面传值,多对多

相关文章:

IOS界面传值-OC

1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 &#xff08;1&#xff09;ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...

阿里mod_asr3.0集成webrtc静音算法

alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码&#xff0c;编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…...

[Git] git pull --rebase / git rebase origin/master

1. git pull --rebase 这个命令是用来更新当前分支的&#xff0c;它会从远程仓库拉取更新&#xff0c;然后将你的本地提交重新应用到更新后的基础之上。它相当于先执行 git fetch&#xff0c;然后在当前分支上执行 git rebase origin/。使用 --rebase 而不是默认的 merge 可以…...

Leetcode​​​​​​​3270:求出数字答案

题目描述&#xff1a; 给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数…...

第十一章 施工监测

11 施工监测 11.1 施工监测主要内容、常用仪器与方法 11.1.1 主要内容 1.目的和意义 及时掌握工程自身及周边环境风险动态、通过分析和预测工程结构及周边环境的安全状态与发展趋势&#xff0c;优化调整设计参数和施工参数提供数据支撑。为今后同类工程施工提供类比资料 2…...

Python爬虫应用领域

Python爬虫作为一种强大的数据获取工具&#xff0c;在多个领域发挥着重要作用。以下是Python爬虫在不同领域的应用情况&#xff1a; 一、数据采集与分析 &#xff08;一&#xff09;市场调研 产品信息收集&#xff1a;爬取电商平台的产品详情、价格、销量、用户评价等数据&am…...

软件架构考试基础知识 002:进程的状态与其切换

进程状态转换的说明 在操作系统中&#xff0c;进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明&#xff1a; 1. 三态模型&#xff08;Three-state Model&#xff09; 三态模型是最基础的进程状态模…...

新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解

首次突破月交付2万辆规模的小鹏汽车&#xff0c;稳吗&#xff1f; 本周&#xff0c;高工智能汽车研究院发布的最新监测数据显示&#xff0c;2024年11月&#xff0c;小鹏汽车在国内市场&#xff08;不含出口&#xff09;交付量&#xff08;上险口径&#xff0c;下同&#xff09…...

VideoPlayer插件的功能和用法

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…...

.NET体系架构

引言 .NET是由微软开发的一个广泛应用的开发平台&#xff0c;旨在帮助开发者构建各种类型的应用程序&#xff0c;包括桌面应用、Web应用、移动应用和云服务。最初&#xff0c;.NET平台的构建主要集中在Windows环境上&#xff0c;但随着.NET Core和随后.NET 5及以上版本的推出&…...

QT中引入OpenCV库总结(qmake方式和cmake方式)

文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境&#xff0c;写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...

matlab系列专栏-快捷键速查手册

目录 1在命令窗口(Command Window)中 2. 在编辑器(Editor)&#xff08;m文件&#xff09;中 1在命令窗口(Command Window)中 1)【↑、↓】——切换到之前、之后运行过的命令&#xff0c;可以重复按多次来达到想要的命令。 2)【Tab】——自动补全。在Command窗口&#xff0c…...

对于 NestJS + TypeORM 查询构造器分页功能的简单二次封装

NestJS 作为 Node.js 领域备受欢迎的框架&#xff0c;其与 TypeORM 的结合为开发者提供了强大的 ORM 能力&#xff0c;简化了数据库操作。然而&#xff0c;在处理分页查询时&#xff0c;直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此&#xff0c;我们可以通过…...

Kafka消息队列出现消息堆积如何解决

Kafka消息队列出现消息堆积&#xff0c;通常是由于消息生产速度远大于消费速度&#xff0c;可能由消费者处理能力不足、网络问题、Kafka配置不合理等原因导致。以下从多个方面介绍应对消息堆积的方法&#xff1a; 消费者端优化 提升消费并行度 增加消费者实例数量&#xff1a…...

LeetCode hot100-100

287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。你设计的解决方案必须 不修改 数组…...

Vue.js:现代前端开发的灵活框架

大家好&#xff01;我是 [数擎 AI]&#xff0c;一位热爱探索新技术的前端开发者&#xff0c;在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情&#xff0c;欢迎关注我的文章&#xff0c;我们一起成长、进步&#xff01; 开发领域&#xff1a;前端开发 | A…...

CUDNN详解

文章目录 CUDNN详解一、引言二、cuDNN的基本使用1、初始化cuDNN句柄2、创建和设置描述符 三、执行卷积操作1、设置卷积参数2、选择卷积算法3、执行卷积 四、使用示例五、总结 CUDNN详解 一、引言 cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是NVIDIA为深度…...

下载并安装MySQL

在Linux系统上下载并安装数据库&#xff08;以MySQL为例&#xff09;的步骤如下&#xff1a; 一、下载MySQL 访问MySQL官网 打开浏览器&#xff0c;访问MySQL的官方网站&#xff1a;https://www.mysql.com/。 进入下载页面 在MySQL官网首页&#xff0c;找到并点击“Downloads…...

Linux ffmpeg 基础用法

简介 FFmpeg 是一个强大的开源多媒体框架&#xff0c;用于处理视频、音频和其他多媒体文件和流。它允许转换、录制、编辑、流媒体等等。 安装 Debian/Ubuntu sudo apt update sudo apt install ffmpegRed Hat/CentOS sudo dnf install ffmpegmacOS (via Homebrew) brew i…...

【C++入门】详解(中)

目录 &#x1f495;1.函数的重载 &#x1f495;2.引用的定义 &#x1f495;3.引用的一些常见问题 &#x1f495;4.引用——权限的放大/缩小/平移 &#x1f495;5. 不存在的空引用 &#x1f495;6.引用作为函数参数的速度之快&#xff08;代码体现&#xff09; &#x1f4…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...