loadView,viewDidLoad,viewDidUnload什么时候被调用

【AAAI2025】【小目标检测】FBRT-YOLO:更快速、更优的实时航拍图像检测方法 FBRT-YOLO是一种新型实时航拍图像检测方法,针对小目标检测的精度与效率平衡问题提出创新解决方案。该方法通过两个轻量级模块显著提升性能:特征互补映射模块(FCM)将浅层空间位置信息深度整合至网络深层,缓解信息失衡;多核感知单元(MKP)采用多尺度卷积增强多目标感知能力。实验表明,在VisDrone、UAVDT和AI-TOD数据集上,FBRT-YOLO在检测精度和速度方面均优于现有实时检测器,特别适用于资源受限的飞行设备。该模型通过精简网络结构,在保持高性能的同时降低了计算负担,为航拍实时检测提供了高效解 阅读详情
标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。
loadView
1.什么时候被调用?
每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。
2.有什么作用?
loadView方法是用来负责创建UIViewController的view
3.默认实现是怎样的?
默认实现即[super loadView]里面做了什么事情。
1> 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
   * 如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
    1. [[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil];  
   * 如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
    1. [[MJViewController alloc] init]; // 加载MJViewController.xib  

2> 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下
  1. self.view = [[[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];  
  2. // applicationFrame的值是:{{x = 0, y = 20}, {width = 320, height = 460}}  
[super loadView]里面就大致完成1>和2>中叙述的内容
4.怎样正确使用这个方法?
大家都知道UIViewController的view可以通过xib文件来创建,但是在某些情况下,xib不是那么地灵活,所以有时候我们想通过代码来创建UIView,比如:
  1. self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];  
 如果想通过代码来创建UIViewController的view,就要重写loadView方法,并且不需要调用[super loadView],因为在第3点里面已经提到:若没有xib文件,[super loadView]默认会创建一个空白的UIView。我们既然要通过代码来自定义UIView,那么就没必要事先创建一个空白的UIView,以节省不必要的开销。正确的做法应该是这样:
  1. - (void)loadView {  
  2.  self.view = [[[UIWebView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] autorelease];  
  3. }  
不需要调用[super loadView],你调用了也不会出错,只是造成了一些不必要的开销。
总结一句话,苹果设计这个方法就是给我们自定义UIViewController的view用的
 
viewDidLoad
1.什么时候被调用?
不过你是通过xib文件还是重写loadView创建UIViewController的view,在view创建完毕后,最终都会调用viewDidLoad方法
2.有什么作用?
一般我们会在这里做界面上的初始化操作,比如往view中添加一些子视图、从数据库或者网络加载模型数据装配到子视图中。例如:
  1. - (void)viewDidLoad  
  2.   
  3.     [super viewDidLoad];  
  4.       
  5.     // 添加一个按钮  
  6.     UIButton *button = [UIButton buttonWithType:UIButtonTypeContactAdd];  
  7.     [button addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];  
  8.     [self.view addSubview:button];  

viewDidUnload
1.什么时候被调用?
iOS设备的内存是极其有限的,如果应用程序占用的内存过多的话,系统就会对应用程序发出内存警告。UIViewController就会收到didReceiveMemoryWarning消息。didReceiveMemoryWarning方法的默认实现是:如果当前UIViewController的view不在应用程序的视图层次结构(View Hierarchy)中,即view的superview为nil的时候,就会将view释放,并且调用viewDidUnload方法
2.有什么作用?
上面说到,发出内存警告且view被释放的时候就会调用viewDidUnload方法,所以一般在释放资源,主要是释放界面元素相关的资源,将相关的实例都赋值为nil
  1. - (void)viewDidUnload {  
  2.     [super viewDidUnload];  
  3.     self.name = nil;  
  4.     self.pwd = nil;  
  5. }  
3.dealloc也是用来释放资源的,那跟viewDidUnload有什么关系?
当发出内存警告调用viewDidUnload方法时,只是释放了view,并没有释放UIViewController,所以并不会调用dealloc方法。即viewDidUnload和dealloc方法并没有任何关系,dealloc方法只会在UIViewController被释放的时候调用
 
三个方法的关系
1.第一次访问UIViewController的view时,view为nil,然后就会调用loadView方法创建view
2.view创建完毕后会调用viewDidLoad方法进行界面元素的初始化
3.当内存警告时,系统可能会释放UIViewController的view,将view赋值为nil,并且调用viewDidUnload方法
4.当再次访问UIViewController的view时,view已经在3中被赋值为nil,所以又会调用loadView方法重新创建view
5.view被重新创建完毕后,还是会调用viewDidLoad方法进行界面元素的初始化
Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头并点击按钮照相,vue3获取摄像头画面执行拍照保存,调整摄像头前置后置抓拍图片给用户展示或保存手机上传服务器 vue3,H5网页,手机移动端,vue3摄像头拍照,前端h5调用手机摄像头,移动端网页调用摄像头,H5实现手机拍照和选择上传,调用本地摄像头实现拍照,vue3调用摄像头拍照,手机浏览器开启摄像头并进行拍照,H5移动端网页中调用手机摄像头,H5实现web调用摄像头在线照相,vue3h5调用摄像头,微信公众号网页如何调用摄像头拍照,公众号H5页面实现打开摄像头照相,怎么生成临时图片,vue3项目调用摄像头实现拍照功能,摄像头打不开没反应,浏览器不兼容怎么办,摄像头权限不弹出,只能在本地运行,拒绝权限后怎么办, 阅读详情

相关推荐

银河麒麟服务器操作系统V10SP3 U盘安装中“基础软件仓库错误”的排查与修复指南

本文针对在无网络环境下使用U盘安装银河麒麟服务器操作系统V10SP3时,遇到的“基础软件仓库错误”问题,提供了详细的排查与修复指南。核心解决方案是通过进入救援模式,使用lsblk命令确定U盘实际设备路径,并在系统引导时手动添加inst.repo内核参数来指定安装源,从而绕过安装程序的自动探测故障,确保安装流程顺利进行。

ik67890123的博客 1193

viewdidload的调用时机

viewDidLoad 按名称的解读来说,它是在加载view的时候调用,之前只是简单的理解当你进入该controller的时候才调用的。不经意的一次调试: 发现,只要你调用某个controller的view,那么它的viewdidload 就会被调用。所以以后不想调用viewdidload 还是不要调用controller的view为好。 这次调试的事件:我还在没有走push的时候调用一个类的

a787188834的专栏 1315

无源定位之时差估计的精确时差估计算法(ETDE)及MATLAB实现程序

时差估计算法之精确时差估计(ETDE)欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想

伊谢尔伦的林中小路 4255

Objective-C基础

Objective-C基础

core的博客 735

Kindle电子书DRM破解全攻略:从下载到转换的完整流程(含最新DeDRM插件配置)

本文详细介绍了如何合法移除个人购买的Kindle电子书的DRM保护,实现跨设备阅读与备份。核心内容包括使用最新DeDRM插件(如noDRM分支)配合Calibre进行配置,并针对亚马逊最新的KFX加密格式提供了密钥提取与实战操作指南。文章强调该方法仅适用于个人合理使用,旨在帮助读者真正掌控自己的数字资产。

delta的博客 576

U24时钟信号上升下降沿出现非单调性--简单分析

交换机U24时钟信号上升下降沿出现非单调性--简单分析

qq_45185504的博客 1131

什么时候会执行viewDidLoad方法

什么时候会执行viewDidLoad方法   这个博文是为了解释,为何有时候,你给属性赋值,在viewDidLoad方法中却取不到值的原因。 第一种情况,presentViewController会执行被present的控制器的viewDidLoad方法:     第二种情况,即使不执行推出或者present操作,也会执行viewDidLoad方法: ...

weixin_34410662的博客 327

基于PlatformIO与CMSIS的STM32库函数开发实战:从环境搭建到外设驱动

本文详细介绍了基于PlatformIO与CMSIS的STM32库函数开发实战,从环境搭建到外设驱动实现。通过对比传统IDE,PlatformIO结合CMSIS框架在跨平台开发、代码可移植性和调试体验上更具优势。文章包含PlatformIO.ini配置详解、GPIO/USART驱动开发实例及常见问题解决方案,帮助开发者高效完成STM32项目开发。

weixin_29190169的博客 423

ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?

在自定义ViewController的时候这几个函数里面应该做什么工作?    viewDidLoad在view 从nib文件初始化时调用, loadView在controller的view为nil时调用。此方法在编程实现view时调用,view 控制器默认会注册memory warning notification,当view controller的任何view 没有用的

u013588966的专栏 560

模拟IC设计避坑:手把手教你用Cadence仿真恒定跨导轨到轨运放(附完整工艺库文件)

本文详细解析了使用Cadence仿真恒定跨导轨到轨运放的全流程,涵盖电路原理、工艺库配置、尺寸设计及仿真分析。通过1:3电流镜补偿技术实现跨导稳定,提供CSMC 0.25um工艺下的实战案例,帮助工程师规避设计陷阱,提升模拟IC设计效率。

weixin_30952535的博客 494

TensorRT量化校准数据集选择

在TensorRT中进行INT8量化时,校准数据集的选择至关重要,直接影响量化后模型的精度和推理性能。这是一个典型的问题。

浩瀚之水的专栏 497

loadView、viewDidLoad及viewDidUnload的关系

标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。 一、loadView 1.什么时候被调用? 每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。 ...

weixin_33796205的博客 369

深入浅出:大型语言模型(LLM)的全面解读

在当今的数字化时代,人工智能技术已经成为各行各业的核心驱动力之一。而在人工智能的领域中,大型语言模型(LLM)作为一种引人瞩目的技术,正在以其强大的语言理解和生成能力引领着一场革命。本文旨在深入浅出地解读大型语言模型,探讨其背后的原理、技术突破、应用场景以及未来发展趋势。

fudaihb的博客 10万+

loadView, viewDidLoad, viewDidUnLoad,分别是在什么时候被调用的.

loadView 1.什么时候被调用? 每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。 2.有什么作用? loadView方法是用来负责创建UIViewController的view 3.默认实现是怎样的? 默认实现即[super loadView

w_sx_的专栏 4978

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用

nit方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初始化ViewController本身   loadView方法 当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。 如果手工维护views,必须重载重写该方法 如果使用IB维护views,必须不能重载重写该方法 loadView和IB构建view 你

yutianguan的专栏 736

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

loadview 和 viewdidload 还有 viewdidunload 调用顺序 及 关系

标题中所说的3个方法,都是UIViewController的方法,跟UIViewController的view属性的生命周期息息相关。接下来我会一一阐述它们的作用以及它们之间的联系。 loadView 1.什么时候被调用? 每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。

于海明的博客 890

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?

由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初始化ViewController本身 loadView方法 当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。 如果手工维护views,必

志存高远 1668

ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?...

1>loadView 当第一次使用控制器的view时,会调用loadView方法创建view 一般在这里自定义view 2>viewDidLoad 当控制器的view创建完毕时会调用,也就是在loadView后调用 一般在这里添加子控件、初始化数据 3>viewDidUnload 当控制器的view因为内存警告被销毁时调用 一般在这里回收...

weixin_30802273的博客 90

IOS中的ViewController 的loadView、viewDidLoad、viewDidUnload

转自:http://www.cnblogs.com/snake-hand/p/3146750.html 由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起: 1 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初始化ViewController本身 2 loadView方法 当vi

博客标题不能为空 487

loadView与viewDidLoad的区别

loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法。 他们都可以用来在视图载入的时候初始化一些内容。 但是他们有什么区别呢?     viewDidLoad 方法只有当 view 从 nib 文件初始化的时候才被调用。viewDidLoad 用于初始化,加载时用到。     loadView 方法在控制器的 view 为 nil 的时候被调用。

X_TopFan的专栏 1300

loadView、viewDidLoad、initWithNibName、awakeFromNib、initWithCoder的用法

每个ios开发者对loadView和viewDidLoad肯定都很熟悉,虽然这两个函数使用上真的是非常简单,但是和类似的initWithNibName/awakeFromNib/initWithCoder放在一起还是非常容易让人混淆的. 大前提是UIViewController有一个UIView.同时,需要理清两个概念,一、实例化一个类. 二、创建一个类。 在XCode...

184

iOS Dev (43) 用loadView必须要注意的几点

iOS Dev (43) 用loadView必须要注意的几点 作者:大锐哥博客:http://prevention.iteye.com 永远不要主动调用 loadView 方法 ViewController 会在 view 的属性被请求且当前 view 为 nil 时调用 loadView。 如果你是用 xib 创建 view 并初始化 ViewController,意味着你要使用 i

大锐哥的技术专栏 4816
上一篇: 点击搜索取消UISearchDisplayController的搜索状态
下一篇: 数据持久化(三)使用第三方类库FMDB
SMY_API
博客等级 码龄13年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值