首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的@State对象不保留它们的值?

@State是SwiftUI中的一个属性包装器,用于声明和管理视图中的状态。当使用@State修饰一个属性时,SwiftUI会自动为该属性创建一个存储器,并在视图状态发生变化时更新该属性的值。然而,@State对象的值不会被保留的原因可能有以下几种情况:

  1. 视图重新加载:当视图被重新加载时,@State对象的值会被重置为其初始值。这通常发生在视图层次结构发生变化、设备方向改变或者应用程序重新启动时。
  2. 状态丢失:如果@State对象所在的视图被销毁并重新创建,例如在导航堆栈中进行页面切换时,@State对象的值也会丢失。这是因为@State对象的生命周期与其所在的视图相关联。
  3. 属性包装器的特性:@State属性包装器的设计初衷是用于管理短暂的、与视图相关的状态。因此,@State对象的值不会被永久保留,以避免内存泄漏和状态管理的复杂性。

为了解决@State对象不保留值的问题,可以考虑使用其他属性包装器或者数据存储方案,例如:

  • @Binding:用于在视图之间传递数据,并保留其值。可以通过将@State属性作为参数传递给其他视图,并使用@Binding修饰符来创建一个可读写的绑定。
  • @ObservableObject:用于创建可观察的对象,可以在整个应用程序中共享和保留其值。通过将@State对象封装在一个ObservableObject中,并在需要的地方引用该对象,可以实现值的保留和共享。
  • 数据持久化:如果需要将数据持久保存,可以使用数据库、文件系统或者其他数据存储方案来保存@State对象的值。这样可以在应用程序重新启动或者视图重新加载时恢复值。

总之,@State对象的值不会被保留是因为其设计初衷是用于管理短暂的、与视图相关的状态。如果需要保留值或者在多个视图之间共享值,可以考虑使用其他属性包装器或者数据存储方案来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在保留装箱对象前提下修改

有人问如何在保留装箱对象前提下修改?...那样之后得到是对1000装箱对象,而不是对100装箱对象了,那么如何修改呢?...首先,这里列出本文涉及一些.NET和CLR准备知识——装箱对象分配和存储、对象托管内存地址获取、对象唯一性确定、托管内存数据读写。...对象分配在托管堆上,由几个部分组成,第一部分是存储对象类型TypeHandle,其后内容随类型不同而不同;对于装箱对象,其后紧跟内存存储是装箱(就是我们要找到然后去修改东东了)。...基于以上内容,我们可以可以做到在保留装箱对象前提下修改值了,显然首先需要是装箱对象引用,然后调用System.Runtime.InteropServices.GCHandle.Aloc(object

1.2K70

为什么自动化流程执行

很多人经常会有这个问题,为什么自动化流程执行。...如果你设置好了自动化流程,但是自动化流程却没有执行,请按照如下顺序检查你流程配置:第一步:请检查自动化流程有没有发布和上线来到【操作后台】- 【流程】,上线流程会如图显示【上线】;没有上线流程会显示灰色...流程第二步:请检查自动化流程是否有执行请来到后台【流程日志】,如果运行成功流程就会显示【执行成功】并有一个【运行id】。...自动化流程执行失败第三步:确认流程是上线状态,但是流程没有执行,为什么?如果流程确认是上线状态,需要确定你流程是否符合你设定触发条件,如果没有达到对应条件,是不会触发。...,被判断了没有执行【流程执行过程中修改】:在有【延迟执行】流程上线后,进行修改,会导致后续流程执行

1.4K30

为什么建议使用框架默认 DefaultMeterObservationHandler

为什么建议使用框架默认 DefaultMeterObservationHandler 背景知识 最近,我们升级了 SpringBoot 3.x,并且,升级后,我们全面改造了原来 Sleuth 以及...),而是采样上报,这样就会导致链路追数据不全 JFR 是保留详细数据好选择,保留在本地,只有发生问题需要排查时候,事后按需获取就行。...start 时候,创建一个 LongTaskTimer.Sample 对象,然后将这个 LongTaskTimer.Sample 对象放入 LongTaskTimer activeTasks 中,...然后还有一个 Timer.Sample 对象,这个 Timer.Sample 对象是用于记录 Observation 耗时。...对象,只保留 Timer.Sample 对象,这样就不会出现内存溢出以及 CPU 飙高问题了。

5800

为什么写不出面向对象代码

” 那么上面的案例代码也有抽象,也有封装,为什么还是算面向过程思维呢。 那么什么是面向对象呢?...注解大家应该陌生,我们使用Spring系列框架开发,就一定会用到注解,但是相信大家很少自己开发注解。 说回正题,我们如何使用注解开发校验功能呢?...关于DDD领域驱动设计,推荐书籍: “《领域驱动设计:软件核心复杂性应对之道》 《实现领域驱动设计》 ” 为什么我们在使用贫血模型 看了上面的代码,我们可能会疑问:使用贫血模型开发挺好啊?...因此总结为什么人们更愿意使用贫血模型呢: “ 充血模型相对贫血模型存在一定设计难度,你需要多花时间思考哪些是对象本身行为 面向过程编程思想根深蒂固,很难改变 对代码没有太大负责态度,认为怎么简单怎么来...那么建议你多做一些思考: 1.代码是不是面向对象代码 2.代码设计是否遵循 高内聚,低耦合设计标准 3.代码是否遵循设计原则,如单一职责原则,开闭原则等 4. ...

1.2K20

为何云监控告警经常和监控对应上?

问题背景: 1. mongo数据库告警通知: 告警内容:云数据库MongoDB | 云数据库(MongoDB)单位时间延迟次数(100ms以上)>2000次 告警对象:cmgo-xxxx 当前数据:4123...查看系统监控,对应时间最高700-800样子,并没有通知4123次。 ---- 下面通过一个测试,详细阐述告警策略配置和监控之间隐秘关系。...那么两个策略分别表示: mongo-1minute: 使用采集粒度为1分钟监控,持续有连续6个采集点(5个间隔)大于100次,才会告警; mongo-5minute: 使用采集粒度为5分钟监控,...持续有连续2个采集点(1个间隔)大于100次,才会告警。...下面看控制台监控曲线: 默认页面,显示时间粒度为1分钟,监控在25次左右波动。 image.png 更换时间粒度为5分钟,因为指标单位为次数,会经过sum聚合,指标值为125次左右波动。

89600

为什么把 Run 出来 Apk 发给老板,却装上!

Run Apk 2.1 testOnly 属性 我们知道,AS Run 起来 Apk,会使用 Debug 签名进行签名,不过安装上,并不是签名问题。...当你使用 adb install 安装 android:testOnly="true" 包时,输出错误信息,明确标记了无法安装一个 TEST_ONLY 包。...这就是为什么你无法安装 Run 出来 Debug.apk。 2.2 为什么要这么设计? 这个问题,对于大多数开发者来说,基本上不是问题。...因为我们只要保证正常提测、发布流程,基本上是很难将一个 Run 出来 Apk 分享给别人。 testOnly 只是一个标记,标记了它是一个测试版本,其实并没有任何实质性东西。...如果我们非要安装一个带有 testOnly Apk,其实也是有办法,否则 AS 又是如何将 Run 起来包,安装到设备上呢?

2.5K00

请教个问题,想把数据中名字重复删掉,只保留年纪大怎么整呢?

大家好,是皮皮。...只保留年龄最大那个 data = data.drop_duplicates('name', inplace=False) print(data) 二、实现过程 这里【甯同学】给了一个思路,先排个序,...,默认为False,即不替换 na_position {‘first’,‘last’},设定缺失显示位置 三、例子 单条件根据排序删除重复 import pandas as pd data =...只保留年龄最大那个) a = data.sort_values('age', ascending=False).drop_duplicates('name') print(a) 多条件根据排序删除重复...三、总结 大家好,是皮皮。这篇文章主要盘点了一个Pandas处理问题,文中针对该问题,给出了具体解析和代码实现,帮助粉丝顺利解决了问题。

1.7K10

为什么把 Run 出来 Apk 发给老板,却装上!

Run Apk 2.1 textOnly 属性 我们知道,AS Run 起来 Apk,会使用 Debug 签名进行签名,不过安装上,并不是签名问题。...这就是为什么你无法安装 Run 出来 Debug.apk。 2.2 为什么要这么设计? 这个问题,对于大多数开发者来说,基本上不是问题。...如果你觉得那里值得改进,请给我留言。一定会认真查询,修正不足。谢谢。 希望读到这您能转发分享和关注一下,以后还会更新技术干货,谢谢您支持!...毕业3年,是如何从年薪10W拖拽工程师成为30W资深Android开发者! 腾讯T3大牛带你了解 2019 Android开发趋势及必备技术点!...八年Android开发,从码农到架构师分享技术成长之路,共勉! 最后祝大家生活愉快~

2.7K30

996程序员们,为什么建议你买保险?

为此,邀请了好朋友资深保险规划师杨震,请他从客观中立角度给大家开一次讲座,全面解读保险里陷阱,避免大家日后被坑。讲座开始前,先上一波干货,给大家分析一下日常买保险常见各种不正确姿势。...而那些花高价买万能险、返还险等,认为包括了“教育金”和“养老金”,不但有保障,还可以理财,很划算。但其实,这种保险价格比纯保障型贵好几倍,同样价格,保额也严重不足。...但很多人不知道,国家早已对各大保险公司疾病进行了统一,前25种重疾病种各家保险公司定义都是相同。 所以,我们看重数量应该是,重疾条款中附加轻症和中症项目。...要不然,我们花再多钱也是白搭,更得不到风险防御效果。 买保险4个正确打开方式 买保险各种不正确姿势,每天都在我们身边上演,这么深水,怎么才能避免被坑钱呢?...其实多花很多冤枉钱 有的朋友在代理人说服下很容易就买了一份“返还险”,认为到期了生病还可以返还保费,像是捡了一个大便宜。 但其实,这类保险是两全型保险,在寿险基础上附加一款重疾险。

2.8K20

为什么数据按顺序排序原来如此 | Java Debug 笔记

接口返回数据顺序总是固定问题描述====在开发突发奇想。将表头信息也给查出来一并返回给前端了。但是正因为这一举动却带来嘲讽。...说接口顺序不对问题定位====首先说明下这个问题是刚入行时遇到。当时很是困惑,当然啦现在看来真的是贻笑大方了。刚入行那会一直都是使用Mybatis 框架实现数据获取。...HashMap key排序是按照keyhash进行排序最近翻看了下HashMap源码了解了其内部元素存储原理才明白这个道理。此时才知其所以然。...决定一探究竟为什么LinkedHashMap 可以实现按照写入顺序排序。通过结构图我们清楚看到他是HashMap子类。所以他存储结构和HashMap基本上是一样。...因为这里是Bug解析所以关于LinkedHashMap源码东西就不深入研究了。最终追踪到了是其内部linkNodeLast这个方法使其具有写入顺序特性。

12710

为什么推荐另外2种快速传几百G文件方法!

引言 是@程序员小助手 Rman,昨天看到一个题目,说在两台PC之间快速传几百G文件,有没有什么好办法。 考虑到操作系统平台,有Windows,Linux,MaxOS,这些都有差异。...参看 两台电脑之间如何快速传输几百G文件?-两台,传输,文件,电脑 ? 这里说说为什么推荐另外2种。 一个是网络存储。...为什么推荐,因为pandownload被举报,开发者收监,百度名声臭不可救药。所以推荐。 国外网速,你我都是知道。 还有一个是,软件共享。 有人说这很简单啊,局域网有QQ,不就行了?...或者用比较老飞秋,传输起来都是贼快吗? 可是你有没有考虑到,如果是Windows要传输给苹果笔记本,或者Linux发行版要传输给Windows,这些软件有没有跨平台应用呢?...回答发出后,有不少网友回复说, “直接拔下来硬盘,接到新主机上。新主机启动,挂载为新磁盘,立马可用!” 这个也是经不起推敲

2.8K10

为什么同样代码就是跑起来,同事却能跑起来?

不知道小伙伴们有没有遇到过标题问题,明明同样一套代码,在自己本地就是运行起来,或者说在本地只改了一个无关痛痒代码,看上去人畜无害,结果就报各种乱七八糟错误,但是同事却能运行好好。...这种情况下其实你们代码版本是不一样,并不是标题提到一样代码,但是很多时候自己内心会以为代码是一样。...还有就是对方运行效果可能是缓存数据,可以清除一下对方缓存,maven 缓存,浏览器缓存等所有可能有缓存地方,然后再次运行,确保在对方环境下是真正能正确运行。 真的没改动代码吗?...还有一种情况就是自己本地的确实改动了部分代码,但是改动地方看上去是人畜无害,但是就是跑起来。...总结 反正跑起来肯定有原因,不是代码原因就是环境原因,一般经过上面几个方式排查,都能找到问题了,如果再不行,重新查询拉取代码库也未尝不是一个方法,当然如果实在解决不了,咨询前辈也是一个很有效方法。

1.4K30

【八股文Java】: Java对象hashCode()是可变吗?发生GC之后会变吗?为什么?hashCode如何生成?

问:Java对象hashCode()是可变吗?发生GC之后会变吗?为什么?hashCode如何生成? 答:Java对象hashCode()默认实现是不可变,即使GC之后也不会变。...因为: 1、如果Java对象hashCode()方法重写即自定义hashCode实现,参与hash计算变量一旦被赋值后就不能再改变,hash与map容器相关,一旦改变,map取值:可能发生业务异常...2、默认Java对象hashCode()方式实现是native级别的,即JVM层实现,生成hashCode后会保存到对象对象头MarkWord中,即缓存在对象头MarkWord中,不会重复计算。...---- 附: 默认Java对象hashCode()方式实现跟踪源码(openjdk源码 版本jdk-jdk-21-ga): 1、寻找注册hashCodenative方法: (src/hotspot...: 上述找到ObjectSynchronizer::FastHashCode方法实现部分代码: HashCode生成方法: 可以看到HashCode生成有好几种策略,此openjdk默认策略时最后一种

63430

番外特别篇之 为什么建议你直接使用UIImage传?--从一个诡异相册九图连读崩溃bug谈起

resultHandler: 替换 requestImageForAsset:targetSize:contentMode:options:resultHandler: 就可以了,前者是直接返回二进制数据,渲染...使支持同时传出 UIImage和原始 NSData对象.传出NSData对象原因是,是因为高像素图片,会引起一些列问题,故事到此远远没有结束,详见衍生问题部分. 6.变更前后代码对比 还是来段代码感受下吧...无法直接以UIImage格式,连续把九张图保存到缓存目录 图片选取后,并不是立即上传,为了能实现"重发"功能,需要在缓存目录保留副本.原来是将 UIImage 转换为 NSData写入.在此过程中,又一次引起了巨额内存开销...,如果原始 UIImage 对象一直存在,这一块内存那就无法释放.这一步,困扰了很久很久,好几个小时!...或许,应该研究下 一个UIImage对象,竟然会二次引起高内存占用 原因.欢迎大神完善!

1.6K70

C++单例模式为什么直接全部使用static,而是非要实例化一个对象

开场 前段时间在知乎回答了这样一个问题: 为什么C++单例模式不能直接全部使用 static变量和 static函数呢?如果全部使用 static的话,是不是也不会有多线程问题了?...: static bool isOn; }; 这可能是很多C++学习者都会有的疑惑,下面是回答。...那么为什么Meyers推荐是第一种呢? 原因是这解决了一类重要问题,那就是static变量初始化顺序问题。...只想说,如果你一定要强加这么多限定的话,那么这种设计模式讨论本身就没有意义。...就很像是在说:自己能够保证每个new出来指针都能delete掉它,所以我不需要RAII…… 所谓设计模式(design pattern)、惯用法(idiom)这种老程序员经验之谈都是让你在大多数情况下

1.2K20

理解Session State模式+ASP.NET SESSION丢失FAQ

FAQ问题列表 Q: session state在部分浏览器上工作,而在其他一些上工作。为什么呢? Q: 在InProc模式中,为什么有时会丢失所有的session?...Q: 在session state中可以存储哪些类型对象? Q: 为什么请求在切换到SQLServer模式之后挂住了?...Q:正在写一个HttpHandler,为什么session stae工作? Q: 正在使用web farm,并且每当我重定向到其他服务器时,session state就会丢失?...模式,当处理一个请求时,session state对象对象将被序列化和反序列化,所以请确认你对象都是可序列化,而它们类都作了可序列化标记。...因此,在事件触发时,与任何HttpRequest对象无关。这也是为什么Response.Redirect 和Server.Transfer工作原因。

1.6K20

Flutter中Key

这意味着 Key 是分配给 Widget 唯一标识,通过 key 可以与其他 Widget 区分开来。对于 Widget 在 Widget 树中改变位置情况,Key 帮助保留它们状态。...为了进一步说明修改 widget 集合时为什么需要 key,这里用一个简单示例说明。示例显示了两个颜色块单击按钮时它们可以交换位置。...当交换色块 widget 时,它们持有 State 属性原因相应元素匹配不上,而期望行为没有实现。...既然你心不在身上,就再找一个吧,将就在一起也没意思。... Key 接受字母数字它们通常用于子列表中,其中每个子项是唯一且恒定对象键 与键相同,唯一区别是它接受一个包含数据对象

1.4K10

教你如何在 React 中逃离闭包陷阱 ...

但是,我们终究还是离不开它:如果我们想编写复杂且性能很好 React 应用,就必须了解闭包。所以,今天我们一起来学习以下几点: 什么是闭包,它们是如何出现为什么我们需要它们。...什么是过期闭包,它们为什么会出现。 React 中导致过期闭包常见场景是什么,以及如何应对它们。...我们 ref 在创建时只会初始化一次,并且不会自行更新。这基本上就是我们一开始创建逻辑,只是我们传递不是,而是我们想要保留函数。...当我们试图访问存储在 Ref 中函数内部 state 或 props 时,我们只能得到它们初始: const Component = ({ someProp }) => { const [state...我们在 onClick 中从未更新过,你能告诉为什么吗? 当然,这又是一个过期闭包。当我们创建 onClick 时,首先使用默认状态(undefined)形成闭包。

53340

【春节日更】最新Vue相关面试题汇总

,故保留。...vue单向数据流 知识点: vue中data为什么是一个函数 vue中data用是函数而不是对象有什么区别,用对象为什么会报错 vue列表里key有什么作用 vue中key值得作用,通常使用什么作为...用过nextTick方法吗 如何监听一个新属性(vue.set、深度监听) 如何用watch监听一个对象 数据是多重对象/数组,改变数据后页面更新怎么处理 组件库样式怎么修改 vuex Vuex...流程 vuex存储 vuex中state中如果有个user对象name为张三,在a页面修改username为李四,怎么在b页面获取时还显示张三 说一下你项目中用到VUEX 如何在vuex里modules...模块里获取index.js里面的state vuex实现过程 vuex实现过程 其它 vue 路由守卫是什么,有什么作用 什么是动态路由 Vue、react为什么要这么设计,优缺点是什么 vue和

1.5K30
领券