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

我应该每次都初始化一个新的ViewController,还是重置旧的ViewController?

在开发过程中,应该根据具体情况来决定是初始化一个新的ViewController还是重置旧的ViewController。这取决于以下几个因素:

  1. 内存管理:如果每次都初始化一个新的ViewController,可能会导致内存占用过高,特别是在频繁切换ViewController的场景下。而重置旧的ViewController可以减少内存占用,提高性能。
  2. 数据状态:如果ViewController包含了一些需要保持的数据状态,比如用户输入的表单数据,那么重置旧的ViewController可能更合适,以保留用户的输入数据。而初始化新的ViewController会导致数据丢失。
  3. 视图复用:如果ViewController的视图层次结构比较复杂,包含了大量的子视图和布局,那么重置旧的ViewController可能更高效,可以避免重复创建和布局子视图。但是如果视图层次结构比较简单,初始化新的ViewController可能更简洁明了。

综上所述,选择初始化新的ViewController还是重置旧的ViewController应该根据具体情况来决定,权衡内存占用、性能、数据状态和视图复用等因素。在实际开发中,可以根据需求和性能测试结果来选择最合适的方式。

(注:本回答中没有提及云计算相关内容,因为问题与云计算领域无关。)

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

相关·内容

UI篇-VC的生命周期以及UIView的layoutSubviews和drawRect方法

前言 看似常用的UIView,其实有很多不经常用到的方法和应该注意的机制,我是一个喜欢打破砂锅问到底的人,可是很多问题在网上搜索不到答案,大部分的博客都是转载相同的东西,所以我自己就新建 Dome,实际测试了一些数据...一个很常见的问题,我们需要在VC被销毁的时候处理一些事情,可是 viewWillDisappear 不管是入栈新的视图还是出栈当前视图都会被调用,无法判断,结合我之前说的原理,我们可以利用下面这个方法判断当前...但是在VC中,当前UIView的是在 viewDidLoad 执行后才初始化好的,所以我们会见到这样一个Bug,在VC初始化语句后面调用 一个 VC的绘制UI的方法,你会发现根本没有效果,这就是因为,VC...中跟试图的初始化是需要时间的,你在VC根试图初始化之前调用绘制UI的方法当然是不会有效果出现的。...那么将在每次设置或更改frame的时候自动调用drawRect:。

1.9K30
  • iOS操作属性列表plist(增删改查)

    达到下面的效果: 创建plist属性列表文件: 首先我们新建一个Single View的工程,这样就有可以直接使用的storyboard和ViewController文件,然后创建一个属性列表文件。...,这表示你打开了Root这个数组在其下进行操作,否则就表示同级操作,点击那个加号,就可以在数组内添加数据,如果最左边的三角形不是往下的,那点击加号则会再创建一个新的平级的量。...,把Table View的dataSource和delegate都关联到我们的ViewController中去,同时,把Table View本身也关联到ViewController.h中去创建一个Outlet...效果如图: 7、修改plist内容 还是一样的思路,修改可变数组某个位置的内容,存入原位置,重新读取显示: //ViewController.m文件中 // 修改plist内容 [...这里有我的源码:https://github.com/Cloudox/PlistTest

    1.6K20

    阅读器多种翻页的设计与实现

    ,对背面做一个自定义展示,需要打开self.pageVC.doubleSided = YES;; 初始化界面的时候和平移一样,但是在使用过程中再调用-setViewControllers时,如果animated...分解UI层的实现,整个动画可以用以下流程来表示: 1、页面初始化,直接显示页面,监听用户pan手势; 2、用户pan手势开始,根据方向确定左滑还是右滑,获取新的VC; 3、处理用户左右滑动,视图跟随用户滑动...; 4、用户pan手势结束,根据动画完成程度确定是补齐动画还是回退; 5、处理完动画相关,将状态重置为1,接受用户的pan手势; 如果还要支持tap手势,则自动完成一次动画效果,再将状态重置为status_show...block来完成); 注意事项: 滑页效果通常都需要添加一个阴影效果,可以对showVC进行处理: - (void)addMaskToVC:(UIViewController *)vc { vc.view.layer.shadowColor...的移动; 2、touchEnd之后,根据pan手势的移动速度和原来的滑动速度,计算得到滑动的新初始速度; 3、touchBegin开始,讲当前速度重置为0; 上述的过程2的处理非常复杂,需要考虑原来的滑动速度

    3.4K10

    将模型添加到场景中 - 在您的环境中显示3D内容

    横屏约束安全区 重新 Outlet 请记住,一个IBOutlet将sceneView链接到ARSCNView?因为我们删除了旧的ARSCNView,所以它打破了这个Outlet。我们需要重新考虑新的。...单击并拖动左侧的圆圈,它应该是第15行,然后释放到ARSCNView上。现在,关闭助理编辑。 添加按钮 我们想在视图中添加一个按钮,用作在场景中添加模型的触发器。...import UIKit import SceneKit import ARKit extension ViewController {} 检索模型 在扩展内部,创建一个新函数来检索我们选择的模型是一个很好的主动...在ViewController.swift中,将一个新的类变量声明为一个节点数组,我们将其初始化为空。...我们实际上没有选择,因为节点具有isHidden的属性,并且不显示一个for。好吧,不是我所知道的。 那么,让我们来看看这两个场景。

    5.5K20

    【IOS开发基础系列】Storyboard专题

    因为所有的窗口设计在一个故事板文件中,你会更容易把握每次改动带给每个窗口的变化。     2、在故事板中可以描述各个窗口之间的转换。这种转换叫做 segue(连接)。...当这个键缺失时,UIApplication将默认加载MainStoryboard.storyboard 文件并自动将故事板中第一个viewcontroller 初始化并放到一个新创建的UIWindow...新的 TabBarController 已经事先配置了两个ViewController,每个Tab 按钮一个。...创建新连接时,新的 Tab 也同时被加到TabBarController上,名字叫做 “Item”。我想将新的场景放在第一个Tab上,可以用拖拽 Tab 的方式改变它们的顺序。         ...注意,我将类的名字和重用 ID 取成了一样——都叫做 PlayerCell——这仅仅是因为我喜欢这样。其实二者毫无干系,你完全让它们不一样。

    1.3K30

    iOS 面试策略之经验之谈-架构的选择

    试想如果所有代码都集中在一个 UIViewController 中,App 理论上确实能够运行,然而当调试时面对拥有庞大代码的单个文件,我们需要花大量的时间去找到发生问题的源头。...基本上大量的逻辑和视图代码都集中在 ViewController 里,View 和 Model 也严格区分,代码分配遵循一定规则。 简单易懂。...相比于 MVC 在 ViewController 一个文件里面直接解决,MVP 的总代码量可能会翻倍,这样 App 的维护成本和文件大小都会增大。...文章到这里就结束了,感谢你的观看,只是有些话想对读者们说说: iOS开发人群越来越少,说实在的,每次在后台看到一些读者的回应都觉得很欣慰,至少你们依然坚守iOS技术岗…为了感谢读者们,我想把我收藏的一些编程干货贡献给大家...;如何获取,具体内容请转看-我的GitHub 我的:GitHub地址

    1K30

    初探 Core ML:学习建立一个图像识别 App

    这个 App 能够让使用者拍照或是从相簿中选择一张相片,然后机器学习演算法将会试着辨识出相片中的物品是什么。虽然可能无法每次都识别成功,但你可以藉此思考出如何在你 App 里使用 Core ML。...完成后的代码应该会如下面所呈现的样子: import UIKit class ViewController: UIViewController, UINavigationControllerDelegate...中初始化。...「为何我们不更早一点初始化呢?」 「在 viewWillAppear 中定义的要点是什么?」 这要点是当你的 App 试着识别你的图像里有哪些物件时,会快上许多。...第 34-38 行: 最后,我们完成新图像的绘製并把旧的资料移除,然后将 newImage 指定给 imageView.image。 如果你有点不明白上面的代码,别担心。

    2.9K70

    UIPageViewController使用 分享笔记

    翻页效果展示图 结构 在使用UIPageViewController前,我们应该先搞清楚它的层次结构。(这里是我在使用过程中的理解,如有不对,欢迎指出)。 ?...到这里是我对pageViewController有一个初步的理解。...方法将textController装入pageViewController中,这个set方法提供了一种样式,决定翻页是纵向还是横向。...通过合理的设置,我们很容易就可以实现一个翻页效果。但是在开发阅读软件中我还遇到一个非常严重的体验问题。在翻页的时候,书页背面的颜色默认为白色。在黑夜模式中非常“辣眼睛”! ?...BackViewController上只有一个大小为屏幕大小的UIImageView,在第一次进入时,将参数viewController的view作为图片设置到BackViewController的UIImageView

    2.7K80

    为什么不推荐使用PHPicker

    ,大家应该或多或少都看过一些别人写文章,介绍相册的变化,介绍 PHPicker,但是有一些点没讲清楚,比如怎么用 PHPicker 获取视频?...那么下面让我们一起看看什么是 PHPicker 以及 iOS 14 相册有什么新的变化。...Demo 以及视频中都没有介绍,这也是我迟迟没有写文章的原因,因为之前我也不知道怎么获取,那么下面让我们一起来看下怎么获取视频。...当用户选择了 limited 模式后,系统将在 App 每次启动后首次触发相册时弹出提示,允许用户修改需要授权给 App 的照片。...: PHChange) { // Your code }复制代码 由于这是一组旧的 API,所以就不介绍细节了(比如判断是新增还是删除),感兴趣的朋友可以去了解一下。

    2.6K40

    微信支付的跨平台架构到底有多牛?

    但是这些软件架构都存在一个问题: 那就是没有处理好业务流程, 界面转场。 微信支付的流程多。而流程就是由一个个的界面(ViewController,Activity)和相关的业务逻辑组合而成。...路由数据模型由 路由类型,还有各个路由类型所需要的信息组合成。 路由类型清晰的定义了要触发的行为。究竟是要开启一个 UseCase,还是要打开一个界面,或者 网页,小程序,弹窗等等。...规范数据传递 iOS 和安卓的旧架构都存在信息传递不当和数据污染问题。这个问题最严重。iOS 和 安卓都出过不少 bug。...所有的界面,业务逻辑都共用一个数据。 无序的数据流动。 数据的流动是不可追溯的,数据的修改可以发生在任意使用公共数据的地方。 那么支付跨平台软件架构,为了杜绝这样的问题。我是这么做的: ?...架构是一个不断演进的过程,随着新的支付业务基于跨平台软件架构的不断编写, 我也会对这个架构进行持续的更新迭代。让这个软件架构更贴合微信支付,更加健壮和完整。

    1.2K10

    微信支付的架构到底有多牛?

    微信支付在各个操作系统,各个应用下的挑战还是蛮大的,这也得益于腾讯架构师的专业。 作为一个重要业务,微信支付在客户端上面临着各种问题,其中最核心问题就是分平台实现导致的问题。...但是这些软件架构都存在一个问题:那就是没有处理好业务流程, 界面转场。 微信支付的流程多。而流程就是由一个个的界面(ViewController,Activity)和相关的业务逻辑组合而成。...路由数据模型由路由类型,还有各个路由类型所需要的信息组合成。路由类型清晰的定义了要触发的行为。 究竟是要开启一个 UseCase,还是要打开一个界面,或者 网页,小程序,弹窗等等。...解决方案如下: ①将 CGI 抽象为独立对象 在架构设计上来说,旧架构是通过单例模式实现的集约型 API,而我们新的架构则是通过命令模式实现的离散型 API。 也就是将 CGI 封装为独立对象。...架构是一个不断演进的过程,随着新的支付业务基于跨平台软件架构的不断编写, 我也会对这个架构进行持续的更新迭代。让这个软件架构更贴合微信支付,更加健壮和完整。

    89910

    浅谈MVC

    但是对于一个后台处理逻辑比较复杂的程序而言,其实以上三部分也只是这个系统中的一部分——前台展示与较浅层次业务逻辑处理部分,但是后台数据处理部分没有涉及到,这也是困惑了我近两年的一个疑问,与传统的三层架构设计...(这个多半还是因为笔者对IOS开发工具不熟所致,还望见谅) 因为只有一个ViewController,所以所有响应事件的处理逻辑都在此ViewController对象中声明与实现。...目前想到的解决方案有两个:一是不用连接线,而就在ViewController中初始化完子View后,挨个注册响应事件(这是根据Web开发经验而来,但还未100%验证过)。...另一个法子,也是目前我在项目中使用的法子,即是只用一个xib文件进行设计,每个子View的界面设计工作都放到ViewController对应的xib文件中来设计,这样界面事件就能轻松跟ViewController...不过此法也有需要注意的地方:1、各个子View一定要跟ViewController中的子View属性或变量用连接线连接起来;2、还是没法包含太多子View(当然,对于移动开发而言,貌似也不应该包含太多子

    95020

    iOS14中的PHPicker

    Demo 以及视频中都没有介绍,这也是我迟迟没有写文章的原因,因为之前我也不知道怎么获取,那么下面让我们一起来看下怎么获取视频。...新增权限 iOS 14 中相册新增了一个 “Limited Photos Library” 模式,在授权时多了一个 “选择照片” 的选项。...当用户选择了 limited 模式后,系统将在 App 每次启动后首次触发相册时弹出提示,允许用户修改需要授权给 App 的照片。..._wv=1027&k=lzJejkSl),不管你是大牛还是小白都欢迎入驻 当然这个弹窗是可以关闭的,如果你希望手动控制 PHPickerController 弹出的时机也是有办法的。...: PHChange) { // Your code }复制代码 由于这是一组旧的 API,所以就不介绍细节了(比如判断是新增还是删除),感兴趣的朋友可以去了解一下。

    3.7K30

    微信支付跨平台软件架构

    但是这些软件架构都存在一个问题: 那就是没有处理好业务流程以及界面转场。微信支付的流程多。而流程就是由一个个的界面(ViewController,Activity)和相关的业务逻辑组合而成。...路由数据模型由 路由类型,还有各个路由类型所需要的信息组合成。 路由类型清晰的定义了要触发的行为。究竟是要开启一个 UseCase,还是要打开一个界面,或者 网页,小程序,弹窗等等。...并且生命周期是一对一的,一个 Cgi 只会有一个 UseCase 处理, UseCase 销毁后,Cgi 也随之销毁。 对比旧架构,新的架构具有如下优点: 杜绝了一对多通信造成的 Bug。...安卓传递的数据类型是一个字典,而 iOS 则是一个 Model 对象。所有的界面,业务逻辑都共用一个数据。 无序的数据流动。...架构是一个不断演进的过程,随着新的支付业务基于跨平台软件架构的不断编写, 我也会对这个架构进行持续的更新迭代。让这个软件架构更贴合微信支付,更加健壮和完整。

    2K20

    iOS对UIViewController生命周期和属性方法的解析

    iOS中的UIViewController是UIKit框架中最基本的一个类。从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础。...这是一个ViewController完整的声明周期,其实里面还有好多地方需要我们注意一下: 1:initialize函数并不会每次创建对象都调用,只有在这个类第一次创建对象时才会调用,做一些类的准备工作...,这里面有一点需要我们注意,如果我们需要向controller中视图进行传值设置,通过以下方法得到的Controller中,视图还没有被初始化创建出来:  ViewController2 * viewController2...在执行过上述方法后,如果返回YES,系统还会在执行如下一个方法,作为跳转前的准备,我们可以在这个方法中进行一些传值操作,这个方法无论使我们手动进行跳转还是storyboard中自动跳转,都会被执行: -...我们可以把它连接到viewController2中的一个按钮上: ? 这样,当我们点击viewController2中的按钮时,就会返回到我们第一个ViewController1中了。

    3K20

    Swift 项目 - Xib | StoryBoard 多人协作技巧

    ,应该像MVP模式那样,每个页面都有独立的Storyboard,每个Storyboard只应该有一个主VC和同页的子VC,主VC不应存在2个以上。...(绝大多数情况下,一个Storyboard上只应该有一个VC) 页面间的Segue连线应该使用Stroyboard Reference Scene,UITabBarController的子页因为复杂度应该当成主...如果需要在初始化的时候拿到主ViewController的实例,则应该在主ViewController``viewDidLoad方法中,调用ChildViewController的特定方法,把 self...通过上面的2种方法不难看出,并非是Storyboard造成ViewController代码臃肿,而是因为设计不当导致,就算你不用Storyboard,把所有功能都写在一个ViewController里一样臃肿...简直不敢相信自己的眼睛,而且差距这么大一定是有什么神奇的事情发生,为了验证我的想法,我又将Storyboard创建复制了一次 var controllers:[ViewController

    2.1K20
    领券