IOS 中loadView,viewDidLoad,viewDidUnload详解及使用

发布时间 - 2026-01-10 23:20:20    点击率:

loadView,viewDidLoad,viewDidUnload,这三个函数到底应该怎么用?

搜索一下,全是转载,大概内容是这样:

  1. loadView 手动加载view
  2. viewDidLoad用于nib文件加载后,进一步处理
  3. viewDidUnload是viewDidLoad的镜像

参考官方文档,我给出纠正:

一、loadView

永远不要主动调用这个函数。view controller会在view的property被请求并且当前view值为nil时调用这个函数。如果你手动创建view,你应该重载这个函数。如果你用IB创建view并初始化view controller,那就意味着你使用initWithNibName:bundle:方法,这时,你不应该重载loadView函数。

这个方法的默认实现是这样:先寻找有关可用的nib文件的信息,根据这个信息来加载nib文件,如果没有有关nib文件的信息,默认实现会创建一个空白的UIView对象,然后让这个对象成为controller的主view。

所以,重载这个函数时,你也应该这么做。并把子类的view赋给view属性(property)(你create的view必须是唯一的实例,并且不被其他任何controller共享),而且你重载的这个函数不应该调用super。

如果你要进行进一步初始化你的views,你应该在viewDidLoad函数中去做。在iOS 3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。

这个网上的资料都说的很不全面,尤其是蓝色字部分。

二、viewDidLoad

这个函数在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成。而多数情况下是做nib文件的后续工作。

网上资料对这个函数的描述则完全不对。

三、viewDidUnload

这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用()。由于controller通常保存着与view(这里黑体的view指controller的view属性)相关的对象(一般是view的子view)或者其他运行时创建的对象的引用,所以你必须使用这个函数来放弃这些对象的所有权以便内存回收。但不要释放那些难以重建的数据(不要在这个函数中释放view)。

通常controller会保存nib文件建立的views的引用,但是也可能会保存着loadView函数创建的对象的引用。最完美的方法是使用合成器方法:

self.myCertainView = nil;

这样合成器会release这个view,如果你没有使用property,那么你得自己显式释放这个view。

网上对这个函数的描述含含糊糊,看了等于没看。

另外:如果controller存储了其他object和view的引用,你还得在dealloc方法中释放这些内存。对于iOS2.x,你还必须在调用super dealloc方法前将这些引用置为nil。

四、结论

所以流程应该是这样:

(loadView/nib文件)来加载view到内存 ——>viewDidLoad函数进一步初始化这些view ——>内存不足时,调用viewDidUnload函数释放views

—->当需要使用view时有回到第一步

如此循环

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# IOS  # loadView  # viewDidLoad  # viewDidUnload介绍  # viewDidUnload使用方法  # JS辨别访问浏览器判断是android还是ios系统  # iOS内存错误EXC_BAD_ACCESS的解决方法  # iOS开发中ViewController的页面跳转和弹出模态  # js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS  # iOS毛玻璃效果的实现及图片模糊效果的三种方法  # iOS开发中WebView的基本使用方法简介  # IOS获取各种文件目录路径的方法  # 是这样  # 加载  # 你应该  # 网上  # 如果你  # 是在  # 看了  # 在这个  # 尤其是  # 那就  # 你要  # 子类  # 你也  # 会在  # 你还  # 你不  # 希望能  # 更高  # 去做  # 如果没有 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Swift中循环语句中的转移语句 break 和 continue  android nfc常用标签读取总结  JavaScript Ajax实现异步通信  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  香港服务器网站推广:SEO优化与外贸独立站搭建策略  EditPlus中的正则表达式 实战(4)  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  活动邀请函制作网站有哪些,活动邀请函文案?  Linux系统运维自动化项目教程_Ansible批量管理实战  非常酷的网站设计制作软件,酷培ai教育官方网站?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  Laravel如何处理文件下载请求?(Response示例)  Laravel如何使用Telescope进行调试?(安装和使用教程)  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel如何处理异常和错误?(Handler示例)  如何在万网ECS上快速搭建专属网站?  详解jQuery中基本的动画方法  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  详解Oracle修改字段类型方法总结  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  香港服务器租用每月最低只需15元?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  php打包exe后无法访问网络共享_共享权限设置方法【教程】  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何打造高效商业网站?建站目的决定转化率  javascript中的try catch异常捕获机制用法分析  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何在橙子建站上传落地页?操作指南详解  微信推文制作网站有哪些,怎么做微信推文,急?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel如何实现事件和监听器?(Event & Listener实战)  Bootstrap CSS布局之列表  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】