程序猿们,iOS中是有生命周期的

React Native入门——组件构成及生命周期简介 刚开始接触React Native开发的程序猿可能会拿着网上的例子和文档一头雾水,毕竟不是像C语言有个main、Android有个OnCreate,iOS有个ViewDidLoad那样,加上JavaScript语法的随意性,让很多人无从下手,本文主要介绍React Native组件的生命周期,帮助读者理解一个React Native组件如何进行展示,如何进行开发。 阅读详情
App启动:当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions:方法;然后由inactive状态切换到active状态,此时调用applicationDidBecomeActive:方法。当App发生中断时,由active状态切换到inactive状态,此时调用applicationWillResignActive:方法。
来回切换App:当切换到另一个App时,由状态active切换到inactive,此时调用applicationWillResignActive:方法;然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。而当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive:方法。
锁屏:当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive:;然后再由inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。
 
系统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没有暂停,系统会在应用程序终止之前调用applicationWillTerminate:来保存用户的一些重要数据以便下次启动时恢复到app原来的状态。
 
3、简述视图生命周期
viewController叫做视图控制器。对内是用于管理视图,对外则是与其他的viewcontroller进行通信。它继承于NSObject。它分为两种类型,一种叫contentViewController,内容视图控制器,主要用于体现内容 如UITableView UIViewController这种直接显示内容的;还有一种叫做containerViewController,容器视图类。典型的就是tabBar,和navigation.它还包含好几个其它的viewController.
       每个view都有一个viewController。且view的生命周期也在viewController里面。所以在view释放之前,viewcontroller是不可以释放的。
       step1:initWithNib    viewController 会进行alloc,并init.
       step2: loadView       在这里会看它的子类是否有重写这个函数,如果重写了则调用子类的,否则就调用她自己的。注意,这个时候视图还是没有没加载进来的哦。
       step3:viewDidLoad    这个时候视图已经存在了。可以在这里添加你想要添加的UI控件了。
       step4:viewWillAppear 视图将出现在屏幕上了
       step5:viewDidAppear   视图已经成功在屏幕上渲染完成了
       step6:viewWillDisappear  视图将要消失了
       step7:viewDidDisappear  视图从屏幕上消失了
       step8:viewDidUnLoad     当发生内存警告的时候,如果本视图不是当前正在显示的视图,则会执行这个函数。将子视图释放。
       step9:dealloc          释放viewController
       而view的生命周期则是step3——step8.
       viewController的生命周期就是 step1——step9
 
 
7、 ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?
当程序接到内存警告时View Controller将会收到这个消息:didReceiveMemoryWarning
 
从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。
 
这个函数的默认实现是:检查controller是否可以安全地释放它的view(这里加粗的view指的是controller的view属性),比如view本身没有superview并且可以被很容易地重建(从nib或者loadView函数)。
 
如果view可以被释放,那么这个函数释放view并调用viewDidUnload。
 
你可以重载这个函数来释放controller中使用的其他内存。但要记得调用这个函数的super实现来允许父类(一般是UIVIewController)释放view。
 
如果你的ViewController保存着view的子view的引用,那么,在早期的iOS版本中,你应该在这个函数中来释放这些引用。而在iOS3.0或更高版本中,你应该在viewDidUnload中释放这些引用。
 
7.应用程序在启动的时候主要做了什么操作?
答:应用程序在启动的时候,会执行main函数,而main函数里面主要执行了UIApplicationMain函数。UIApplicationMain函数执行完主要做了以下三个操作:
(1)创建应用程序UIApplication对象。
(2)创建了应用程序代理对象。默认的应用程序代理对象是AppDelegate。
(3)建立一个事件循环RunLoop。用来实时监测应用程序中的各种事件(触摸,晃动,远程控制事件,通知,观察者,timer等等)。
8.请描述一下viewController几个重要方法的执行时机
答:视图控制器的生命周期分为创建、 显示 和 销毁。 
(1)创建
         xxx *x = [[xxx  alloc] init]  // 作用:分配内存空间,创建控制器时使用
(2)加载和显示:
  - (void)loadView: // 作用:加载根视图(即为self.view赋值)  ,在控制器view属性的getter方法首次调用的时候执行此方法。
根视图已加载: 
- (void)viewDidLoad// loadView执行完毕之后,立即执行此方法。作用:给创建好的控件设置值,做网络请求,开启timer等
loadView 和 viewDidLoad 当首次访问controller的根视图时才会执行,即view属性的getter方法首次使用时执行, loadView 执行在前, viewDidLoad执行在后。 
 如果重写了 loadView 一定要给控制器的根视图赋值(self.view = xxView;),在给控制器的根视图赋值的之前,不能使用控制器view属性的getter方法,否则会重复执行 loadView 和viewDidLoad 方法。 
视图将要显示: 
- (void)viewWillAppear:
视图将要被添加到 UI 层级上,还没有添加时执行。(此时视图还没有显示)
视图已经显示: 
- (void)viewDidAppear
视图已经被添加到 UI 层级上,视图已经显示出来时执行。(视图已经显示)  
视图将要消失: 
- (void)viewWillDisappear:
视图将要被从 UI 层级上面移除,但视图还没有移除时执行。 (视图还可见)
视图已经消失: 
- (void)viewDidDisappear:
视图已经从 UI 层级上面移除,视图已经不可见时执行。 (视图不可见)
(3)销毁:
- (void)viewWillUnload
iOS6.0之后已经被弃用。iOS 5.0 之前,当低内存且控制器的view不需要使用的时候会调用这个方法,即当控制器的根视图 将要 被释放时执行([vc.view release],vc.view还未置空),我们可以在这个方法中移除一些跟视图相关的观察者和通知,并记录视图的状态,以便之后重新创建视图。 iOS6.0 之后不再需要做释放了,该方法也被遗弃了。
- (void)viewDidUnload
iOS6.0 之后已经被弃用。iOS 5.0 之前,当低内存且控制器的view不需要使用的时候会调用这个方法,即当控制器的根视图被释放时执行([vc.view release],vc.view已经为nil),这个方法给我们一个机会做内存的相关清理工作,如果控制器对某些视图有引用,可以在这里释放这些引用,同样可以释放一些懒加载的对象,但是不要释放那些不容易重新加载的数据。 iOS6.0 之后不再需要做释放了,该方法也被遗弃了。
 
 
 
21. 简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?
应用程序的状态:
Not running:未运行,程序没启动
Inactive   :未激活,程序在前台运行,不过没接受到事件,没有事件处理的状态下通常处于这个状态。
Active         :激活   程序在前台并且接收到了事件
Backgound :后台   程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。
Suspended :挂起  程序在后台不能执行代码。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    //告诉代理进程启动但还没进入状态保存
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  // 告诉代理启动基本完成程序准备开始运行
- (void)applicationWillResignActive:(UIApplication *)application
 // 当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationDidBecomeActive:(UIApplication *)application 
  //   当应用程序入活动状态执行,这个刚好跟上面那个方法相反
- (void)applicationDidEnterBackground:(UIApplication *)application
 //  当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
- (void)applicationWillEnterForeground:(UIApplication *)application
 //当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
- (void)applicationWillTerminate:(UIApplication *)application
 //当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
- (void)applicationDidFinishLaunching:(UIApplication*)application
  //当程序载入后执行
 
22.描述应用程序的启动顺序。
①、程序入口main函数创建UIApplication实例和UIApplication代理实例
②、在UIApplication代理实例中重写启动方法,设置第一ViewController
③、在第一ViewController中添加控件,实现对应的程序界面。
 
 
23.ViewController的alloc,loadView。viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?(UI第三讲 自定义视图、视图控制器)alloc初始化当前的ViewController
loadView:没有正在使用nib视图页面,子类将会创建自己的自定义视图层
viewDidLoad:试图被加载后调用
viewWillAppear:试图即将出现的时候调用
viewDidUnload:<iOS6之后废弃>当系统内存吃紧的时候会调用该方法,释放掉当前未在window中显示的试图和对应的控制器
iOS 分析MVC、MVP、MVVM、VIPER 天天说MVC,尤其对于做iOS开发的,更是口头禅,因为Apple已经为我们量身定制了适合iOS开发的MVC架构。那么什么是MVC? 对于iOS的程序猿来说,MVC人人都说自己会用,但是呢实际开发过程中很多人都会有这样的体会,controller里的代码比较多,尤其需求不断的更改和增加,controller里的代码会越来越多,apple退出的MVC真的有这么不靠谱吗?很多人都会纠结的一个问题,网络... 阅读详情

相关推荐

iOS面试现场,笔试提高题详解

现在已经不断有网友发我他们在面试中遇到的面试题,这是一位程序媛前面在面试中遇到的问题 前面两个过于基础,从提高题开始分享;个人见解,勿喷 持续关注:请叫我Hank,持续输出各大公司iOS面试系列文章,欢迎广大程序猿找我投稿面试中碰到的面试题,我会给你一份我的见解和答案,前面已经分享100道我招聘的面试题,加入下方iOS技术交流群624212887直接获取 题一:what is purpose...

IM_Hank的博客 1755

UIApplication sharedApplication详细解释-IOS

iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示:  int UIApplicationMain (  int argc,  char *argv[],  NSString *principalClassName,  NSString *delegateClassName  );  那么UIApplicationMai

huifeidexin_1的专栏 7万+

iOS ARC完全指南

什么是自动引用计数 自动引用计数(ARC, Automatic Reference Counting)是指内存管理中对引用采用自动计数的技术 ARC苹果官方说明 在Objective-C采用Automatic Reference Counting (ARC)机制,让编译器来进行内存管理。在新一代Apple LLVM编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在降低程序崩溃、内存泄漏等风险的同时,很大程度上减少了开发程序的工作量。编译器完全清楚目标对象,并能立刻释放那些

qq_45824823的博客 918

给Android程序猿的六个建议

假设你一年前写的代码 , 在如今看来你还感觉写的非常不错 , 那么说明你学习的不够多. 不要在Context中持有静态引用 public class MainActivity extends LocationManagingActivity implements ActionBar.OnNavigationListener, GooglePlay...

weixin_34203426的博客 93

深度强化学习系列(13): 策略梯度(Policy Gradient)

对于DQN来说使用一个网络直接逼近了值函数,最后取得了非常不错的效果, 但是对于一些连续性控制或者动作空间特别大的环境来说,很难全部计算所有的值函数来得到最好的策略,那么直接计算策略的方法就别提出来了。 回顾一下前面几篇,所谓的策略,其实就是状态到动作的映射数学表达为 π:s→aπ:s→a\pi : s \to a, 我们用ττ\tau 表示状态s到最后一个状态的一个序列,表示为: τ:st...

深度强化学习(DeepRL)探索博客 4641

基于Pixhawk与OpenMV的无人机视觉引导精准降落系统设计与实现

本文详细介绍了基于Pixhawk飞控与OpenMV视觉模块的无人机精准降落系统设计与实现。系统通过OpenMV识别Apriltag标签,结合MAVLink通信将视觉数据发送给Pixhawk,实现厘米级精准降落。文章涵盖硬件连接、软件配置、核心代码逻辑解析及实战调试技巧,为无人机自动充电、物流配送等场景提供可靠解决方案。

weixin_29189377的博客 320

UIViewController生命周期控制

UIViewController生命周期控制 UIViewController介绍 官方的介绍例如以下 The UIViewController class provides the fundamental view-management model for all iOS apps. You rarely instantiate UIViewController objects d...

weixin_34050427的博客 101

[亚信线上教学] AX58100: EtherCAT从站设备仿真功能设计教学

什么情况需要开启EtherCAT从站设备仿真功能呢? 一般来说, 当EtherCAT从站产品,不需要使用额外的微控制器介入,或使用不具备EtherCAT从站通讯协议栈的微控制器一同协作的情况下,就必须开启EtherCAT从站设备仿真功能,这样EtherCAT主站才能够正常设置从站设备的工作状态. 亚信AX58100 EtherCAT从站控制芯片的优点 AX58100 EtherCAT从站控制器, 集成2个百兆以太网Phis, 并支持一些额外的控制接口, 例如脉冲宽度调变, 增量, 霍尔编码器, .

allanchou1的专栏 7422

iOS UIKit:App

1、App生命周期 IOS架构是由许多设计模式实现,如model-view-controller 和 delegation模式。 1.1 main函数 与其它框架类似,IOS框架的入口也是从main函数,但是无需程序猿去实现这个main函数,Xcode已经帮我们实现了,在main函数中启动UI框架,其实它是调用了UIApplicationMain函数。 ...

a567676的博客 207

从零开始,用Cadence Virtuoso手把手仿真一个1.5V LDO(附完整电路与仿真脚本)

本文详细介绍了如何使用Cadence Virtuoso从零开始仿真一个1.5V LDO,包括环境准备、电路导入、Testbench构建、核心仿真类型分析以及高级调试技巧。通过完整的电路与仿真脚本,帮助读者掌握LDO设计与仿真的关键技术,提升电路设计能力。

weixin_31309419的博客 445

VSAN闪存缓存磁盘故障处理指南-RAID0模式实战解析

本文详细解析了VSAN集群中RAID0模式下的闪存缓存磁盘故障处理全流程。通过模拟真实故障场景,从告警识别、数据重建策略到磁盘组重构,提供了手把手的实战操作指南,并深入探讨了RAID0缓存故障的独特影响与风险,为运维人员应对此类高性能存储架构的突发问题提供了专业解决方案。

assembly8low的博客 444

小程序生命周期——小程序探索

前言 以小程序为切入点,深入理解总结方方面面的知识点,做成系列文章,希望能得到大神的指点和帮助新人入门,承上启下才是好程序猿由于是系列第一篇文章,紧跟着的是一大段废话,只关心技术的可以跳过 转眼半年又要过去了,意味着来新公司快半年了,离上次写文章也半年了,浑浑噩噩得当码农半年了,这半年主要是搬砖(定制VUE和小程序)各种重复做功,说实话...

weixin_34378969的博客 256

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2081

iOS内存分区

内存分区:(堆区,栈区,静态区,常量区,代码区) 1、栈区 (heap) 存放的局部变量、先进后出、一旦出了作用域就会被销毁;函数跳转地址,现场保护等; 程序猿不需要管理栈区变量的内存; -栈区地址从高到低分配; 2、堆区(stack) 堆区的内存分配使用的是alloc; 需要程序猿管理内存; ARC的内存的管理,是编译器再便宜的时候自动添加 retain、release、autorelease...

weixin_40977287的博客 278

【即插即用模块】注意力篇 | TGRS 2025 | ASD:自适应频域解耦,动态拆分高低频+空间注意力,频域空间特征双增强!

摘要: FDMF-Net提出了一种频域解耦多模态融合网络,核心组件为振幅谱解耦模块(ASD)。ASD通过自适应频域拆分和频域-空域协同增强,有效分离模态不变与模态特定特征。该模块利用MLP学习动态阈值调整高低频比例,并通过空间注意力分别强化频域特征,在遥感语义分割任务中实现了细节与结构的协同增强。实验表明,ASD模块能减少模态内冗余,提升特征判别性,为多模态数据融合提供了新思路。代码已开源,适用于需要强化细节与结构的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 306

5、自动化代码结构与运维系统的优化

本文探讨了自动化代码结构与运维系统的优化方法,涵盖审批流程的模块化设计、日志记录与工单系统的集成、通知方式的选择、错误处理的策略以及持续改进的实践。同时,深入分析了运维盲目性问题,通过故障案例揭示了关键指标缺失和日志未充分利用的弊端,提出了开发与运维角色转变的必要性。文章还介绍了如何生成有用的系统指标、建立良好的日志习惯以及实施日志聚合,以提升系统的可观测性和可靠性。最终通过总结和流程图展示了优化措施的核心要点,为构建高效、可靠的运维体系提供了指导。

pp12345的博客 71

常见多线程实现,iOS开发程序猿进阶

一 常见多线程实现 (一)pthread (1)特点 1)一套通用的多线程API 2)适用于Unix/Linux/Windows等系统 3)跨平台可移植 4)使用难度大 (2)使用语言 C语言 (3)使用频率 几乎不用 (4)线程生命周期 由程序员进行管理 (5)概念、属性与方法 略 (二)NSThread (1)特点 1)使用更加面向对象 2)简单易用,可直接操作线程对象 (2)使用语言 OC (3)使用频率 偶尔使用 (4)线程生命周期 由程序员进行管理 (5)概念、属性与方法 1)创建线程:

zengfengfengfeng的博客 203

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ios知识点小结

内存管理  1:对一个对象使用alloc,new,copy,retain,当你不再需要使用该对象时候,你必须要向该对象发送一条releas或者autorelase消息,释放对象所占用内存空间 2:当向一个对象发送autoreleas时候,对象并没有被释放,而是暂时放到一个自动释放池中,是一个队列形式存放,后进先出,当应用程序结束或者时间循环结束,程序操作系统会向池中每个对象发送一条releas

JerryLee的专栏 694

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架

前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCore框架主要是用来实现iOS与H5的交互.当然了,最早我曾经写过iOS浅谈webView的JS一种用法.(去掉web显示页的广告),这种算得上最简单的iOS与H5的交互了.现在混合编程越来越多,H5的相对讲多,所以研究JavaScriptCore框架是相当有必要的.好了不扯这些没用的了,来搞今天的主题—J..

得不到的永远是骚栋. 902

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【React Native从入门到精通】React Native的组件构成及生命周期分析

刚开始接触React Native开发的程序猿可能会拿着网上的例子和文档一头雾水,毕竟不是像C语言有个main、Android有个OnCreate,iOS有个ViewDidLoad那样,加上JavaScript语法的随意性,让很多人无从下手,本文主要介绍React Native组件的结构和生命周期,帮助读者理解一个React Native组件如何进行展示,如何进行开发。 1.组件的构

389

“自释放”在iOS开发中的应用

转载请注明出处:http://www.olinone.com/ 今天,跟大家聊聊“自释放”思想在iOS开发中的应用,何为“自释放”?可以简单的理解为对象在生命周期结束后自动清理回收所有与其相关的资源或链接,这个清理不仅仅包括对象内存的回收,还包括对象解耦以及附属事件的清理等,比如定时器的自我停止、KVO对象的监听移除等 对象内存的回收 开发中,对象管理的基本原则——谁创建谁释放

Mr_Big_Kong的博客 627

【iOS】内存分区

关于iOS内存分区的一点点学习

2301_79847748的博客 754

iOS开发 iPhone X适配

iPhone X 的到来,惊艳的是果粉,苦逼的是程序猿。今天升级到Xcode9.0,运行项目,所谓的全屏 iPhone X,but 页面好像也没有全屏,于是根据之前的适配经验,总算初步解决了这个问题,记录如下,以备后需。 App 页面适配 适配前 问题:App 未全屏显示 解决办法 LaunchImage 中添加一个和 iPhone X 相关的启动

奋斗吧灬青年的博客 631

iOS多线程相关操作

UILabel(标签)用来显示文本,在App中出现频率很高,它和UITextView的区别是它不能用来编辑文本,而UITextView可以输入和编辑文本,UILabel是UIView的子类,扩充了父类的功能,扩展了文字显示的功能,本质是能显示文字的视图,其创建方式与UIView类似,代码如下:

Xiumudiao的专栏 358
上一篇: iOS开发中关于多线程的问题(NSOperationQueue,NSThread,GCD)
下一篇: 关于集成支付宝SDK的开发
kaihaOS
博客等级 码龄11年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值