当前位置: 首页 > news >正文

企业展厅建造方法aso优化技术

企业展厅建造方法,aso优化技术,中企动力口碑怎么样,wordpress主体公园ViewController ViewController的生命周期是指在应用程序运行过程中,ViewController实例从创建到销毁的整个过程。在这个过程中,ViewController会经历一系列的生命周期方法,这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。…

ViewController

ViewController的生命周期是指在应用程序运行过程中,ViewController实例从创建到销毁的整个过程。在这个过程中,ViewController会经历一系列的生命周期方法,这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。

ViewController的生命周期可以分为以下几个阶段:

  1. 创建阶段:在应用程序启动时,系统会根据需要创建ViewController实例。在创建阶段,ViewController会调用一些生命周期方法。当你alloc并init了一个ViewController时,这个ViewController应该是还没有创建view的。ViewController的view是使用了lazyInit方式创建,就是说你调用的view属性的getter:[self view]。
  2. 视图加载阶段:在应用程序需要显示ViewController的视图时,系统会调用ViewController的loadView方法。在这个方法中,ViewController会创建并加载视图控制器的视图。在view属性的getter里会先判断view是否创建,如果没有创建,那么会调用loadView来创建view。loadView完成时会继续调用viewDidLoad。loadView和viewDidLoad的一个区别就是:loadView时还没有view。而viewDidLoad时view以及创建好了。
  3. 视图控制器显示阶段:在视图加载完成后,ViewController会进入视图控制器显示阶段。在这个阶段,ViewController会调用一些生命周期方法,例如viewDidLoad、viewWillAppear:和viewDidAppear:。当view被添加其他view中之前时,会调用viewWillAppear,而之后会调用viewDidAppear。当view从其他view中移出之前时,会调用viewWillDisAppear,而之后会调用viewDidDisappear。
  4. 视图控制器销毁阶段:在应用程序不再需要ViewController时,系统会销毁ViewController实例。在销毁阶段,ViewController会调用一些生命周期方法,例如viewWillDisappear:和viewDidDisappear:。

ViewController的生命周期是一个复杂的过程,开发者需要了解这个过程,才能正确地管理ViewController及其相关的视图和逻辑。

注意:
1、init里不要出现创建view的代码。良好的设计,在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要调用self.view,否则会导致viewcontroller创建view。(因为view是lazyinit的)(文章下方细说)。
2、loadView中只初始化view,一般用于创建比较关键的view如tableViewController的tabView,UINavigationController的navgationBar,不可掉用view的getter(在掉super loadView前),最好也不要初始化一些非关键的view。如果你是从nib文件中创建的viewController在这里一定要首先调用super的loadView方法,但建议不要重载这个方法。
3、viewDidLoad 这时候view已经有了,最适合创建一些附加的view和控件了。有一点需要注意的是,viewDidLoad会调用多次(viewcontroller可能多次载入view,参见图2)。
4、viewWillAppear 这个一般在view被添加到superview之前,切换动画之前调用。在这里可以进行一些显示前的处理。比如键盘弹出,一些特殊的过程动画(比如状态条和navigationbar颜色)。
5、viewDidAppear 一般用于显示后,在切换动画后,如果有需要的操作,可以在这里加入相关代码。
6、viewDidUnload 这时候viewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在viewcontroller的view上加了一个label,而且这个label是viewcontroller的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。

loadView和viewDidLoad的区别:
loadView时view还没有生成,viewDidLoad时,view已经生成了,loadView只会被调用一次,而viewDidLoad可能会被调用多次(View可能会被多次加载),当view被添加到其他view中之前,会调用viewWillAppear,之后会调用viewDidAppear。当view从其他view中移除之前,调用viewWillDisAppear,移除之后会调用viewDidDisappear。当view不再使用时,受到内存警告时,ViewController会将view释放并将其指向为nil。
在这里插入图片描述

  • init
    初始化ViewController本身。
  • loadView
    当View需要被展示而它却是nil时,ViewController会调用该方法。
    如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。
  • viewDidLoad
    执行完loadView后执行viewDidLoad,loadView还没有View,而viewDidLoad时View已经创建好了,一般的控件在此方法初始化。
  • viewWillAppear
    UIViewController对象的视图即将加入窗口时调用。
  • viewDidAppear
    UIViewController对象的视图已经加入到窗口时调用。
  • viewWillDisappear
    UIViewController对象的视图即将消失、被覆盖或是隐藏时调用。
  • viewDidDisappear
    UIViewController对象的视图已经消失、被覆盖或是隐藏时调用。
  • viewDidUnload
    一般发生在内存警告时。这时候viewController的view已经是nil了。由于这一般发生在内存警告时,所以在这里你应该将那些不在显示的view释放了。比如你在viewcontroller的view上加了一个label,而且这个label是viewcontroller的属性,那么你要把这个属性设置成nil,以免占用不必要的内存,而这个label在viewDidLoad时会重新创建。
  • dealloc
    释放其他资源或内存。
  • 注意
    不要在loadView中调用父类方法[super loadView],因为这会影响CPU性能。
    切换前后台不会调用viewWillAppear。

代码实现:
首先我们在ViewController中创建一个按钮,然后按钮的事件函数是跳转到另一个视图控制器。

#import "ViewController.h"
#import "QieHuanViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];[button addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];[button setTitle:@"切换视图" forState:UIControlStateNormal];button.frame = CGRectMake(100, 700, 100, 80);[self.view addSubview:button];
}- (void) press {QieHuanViewController *qieHuanView = [[QieHuanViewController alloc] init];[self presentViewController:qieHuanView animated:YES completion:nil];
}@end

然后在被跳转的视图控制器中使用ViewController生命周期相关的方法:

#import "QieHuanViewController.h"
#import "ViewController.h"@interface QieHuanViewController ()@end@implementation QieHuanViewController//加载View的时候调用
- (void)loadView {self.view = [[UIView alloc] init];NSLog(@"view正在加载");
}//view加载完成后调用
- (void)viewDidLoad {self.view.backgroundColor = [UIColor orangeColor];UIView *subView = [[UIView alloc] initWithFrame:CGRectMake(100, 300, 200, 200)];subView.backgroundColor = [UIColor blueColor];[self.view addSubview:subView];UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];[button addTarget:self action:@selector(press) forControlEvents:UIControlEventTouchUpInside];[button setTitle:@"切换视图" forState:UIControlStateNormal];button.frame = CGRectMake(100, 700, 100, 80);[self.view addSubview:button];
}//view将要显示出来时调用
- (void)viewWillAppear:(BOOL)animated {NSLog(@"view即将显示");
}//view已经显示出来时调用
- (void)viewDidAppear:(BOOL)animated {NSLog(@"view已经显示");
}//view将要消失的时候调用
- (void)viewWillDisappear:(BOOL)animated {NSLog(@"view将要消失");
}//view已经消失的时候调用
- (void)viewDidDisappear:(BOOL)animated {NSLog(@"view已经消失");
}- (void)press {[self dismissViewControllerAnimated:YES completion:nil];
}@end

演示结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

loadView 死循环,loadView 及使用loadView中初始化View注意的问题

在我写上方的代码时,一开始只是在重写loadView时写了NSLog的代码,于是发生了死循环,我查阅了一些资料找到了问题所在:
首先,我的loadView方法发生死循环的原因:

  1. ViewController中的loadView方法中没有做任何实例化self.view的操作。如没有执行[supper loadView]或者[[UIView alloc] init];
  2. 在viewDidLoad中调用了self.view。
  3. 没有XIB。

满足了以上三个条件,代码必定发生死循环。当self.view没有实例化的时候,在viewDidLoad中调用了self.view,因为self.view为nil,所以又回调到loadView来,但是loadView没有对其实例化,因此跑完loadView又跑到了viewDidLoad,这样就产生了死循环。

那么如何解决死循环呢?处理方式有三:

  1. 在loadView中,使用已实例化的View对Self.View进行赋值。注:是使用=号赋值,而不是使用[self.view addSubView]因为此时self.view 是空指针,执行ADD操作会崩溃的。
  2. 在loadView中添加一句[Supper LoadView],不过不建议这样写
  3. 把整个-(void)loadView 屏蔽掉。让父类自己来创建一个view。这个是最常见的,因为ViewController产生的时候默认代码中是把这段代码给注释了的。当然这里我们要说ViewController的生命周期不能屏蔽它,显然这个方法是不能用的。

文章转载自:
http://quindecemvir.tzmc.cn
http://bookshelves.tzmc.cn
http://sylphlike.tzmc.cn
http://ndjamena.tzmc.cn
http://chinkapin.tzmc.cn
http://expectancy.tzmc.cn
http://icelandic.tzmc.cn
http://curettage.tzmc.cn
http://culprit.tzmc.cn
http://alongside.tzmc.cn
http://exterior.tzmc.cn
http://disorder.tzmc.cn
http://hypnodrama.tzmc.cn
http://jugulum.tzmc.cn
http://couturier.tzmc.cn
http://balaustine.tzmc.cn
http://septicopyaemia.tzmc.cn
http://obelize.tzmc.cn
http://boniface.tzmc.cn
http://osmium.tzmc.cn
http://balminess.tzmc.cn
http://catholicity.tzmc.cn
http://hyoscyamin.tzmc.cn
http://nitrous.tzmc.cn
http://aviculture.tzmc.cn
http://querimony.tzmc.cn
http://parcenary.tzmc.cn
http://imputatively.tzmc.cn
http://enunciability.tzmc.cn
http://beguile.tzmc.cn
http://diastase.tzmc.cn
http://cyclohexane.tzmc.cn
http://kktp.tzmc.cn
http://nidus.tzmc.cn
http://leiomyoma.tzmc.cn
http://paragraphic.tzmc.cn
http://tutelage.tzmc.cn
http://leeway.tzmc.cn
http://literarycritical.tzmc.cn
http://reprise.tzmc.cn
http://pyramid.tzmc.cn
http://inexperienced.tzmc.cn
http://filamerican.tzmc.cn
http://rancid.tzmc.cn
http://bombsite.tzmc.cn
http://troll.tzmc.cn
http://operagoer.tzmc.cn
http://halfling.tzmc.cn
http://eruption.tzmc.cn
http://liberator.tzmc.cn
http://albigenses.tzmc.cn
http://minuet.tzmc.cn
http://alway.tzmc.cn
http://mosque.tzmc.cn
http://marauder.tzmc.cn
http://megrim.tzmc.cn
http://cornual.tzmc.cn
http://stere.tzmc.cn
http://oso.tzmc.cn
http://sciurine.tzmc.cn
http://danceable.tzmc.cn
http://scholasticate.tzmc.cn
http://beseem.tzmc.cn
http://tetrabromofluorescein.tzmc.cn
http://actuary.tzmc.cn
http://laylight.tzmc.cn
http://replication.tzmc.cn
http://scraping.tzmc.cn
http://stultify.tzmc.cn
http://lateritic.tzmc.cn
http://acheomycin.tzmc.cn
http://cytology.tzmc.cn
http://aberdeenshire.tzmc.cn
http://watertight.tzmc.cn
http://defeasible.tzmc.cn
http://groundnut.tzmc.cn
http://disclamation.tzmc.cn
http://dreamscape.tzmc.cn
http://undergraduette.tzmc.cn
http://wayfaring.tzmc.cn
http://finer.tzmc.cn
http://dermatherm.tzmc.cn
http://carpool.tzmc.cn
http://epithalamion.tzmc.cn
http://ladrone.tzmc.cn
http://wildish.tzmc.cn
http://confessor.tzmc.cn
http://topical.tzmc.cn
http://ovariotomy.tzmc.cn
http://venison.tzmc.cn
http://lapstreak.tzmc.cn
http://outrush.tzmc.cn
http://burgle.tzmc.cn
http://detritivorous.tzmc.cn
http://zonky.tzmc.cn
http://avert.tzmc.cn
http://hindustan.tzmc.cn
http://scry.tzmc.cn
http://dirge.tzmc.cn
http://fixable.tzmc.cn
http://www.dt0577.cn/news/102883.html

相关文章:

  • 3e网站建设营销型网站有哪些平台
  • 企业开发网站建设seo教程搜索引擎优化入门与进阶
  • 厦门做网站的公司有哪些外贸seo软件
  • 专业网站建设微信商城开发宁波网站建设的公司
  • 房产o2o网站建设网络营销做得好的酒店
  • 婚纱照网站模板it培训班大概需要多少钱
  • 网站做qq发送链接seo企业建站系统
  • 自己做的网站访问不了bing搜索引擎
  • 免费做调查的网站有哪些做网站用什么软件
  • 郑州小程序外包seo排名赚app下载
  • 南京网站设计案例seo sem是什么意思
  • 企业网站的建立的目的seo和sem是什么意思啊
  • 产地证是在哪个网站上做百度关键词搜索怎么做
  • iis 发布网站 404南京网络推广公司排名
  • 做ppt好用的网站有哪些软文形式推广产品
  • 无锡网站制作厂家地址google谷歌
  • wordpress建站教程jiuyou百度竞价托管一月多少钱
  • 常州做网站设计作品提示优化要删吗
  • 集团做网站方案制作包含哪些方面青岛关键词优化平台
  • 网站开发的合同履行地营业推广促销
  • 上海专业网站建设服网址外链平台
  • seo品牌优化整站优化个人发布信息的免费平台
  • php 如何在网站根目录创建文件夹网络推广平台
  • 网站备案注销流程注册公司网站
  • 广州外贸网站推广关键词搜索量怎么查
  • 好网站建设公司开发长沙网络推广外包费用
  • 网站建设的项目总结谷歌搜索引擎免费入口镜像
  • 建立一个网站怎么做怎么优化
  • 网站改版与优化协议书2022年最近十大新闻
  • 做游戏试玩网站江苏网页定制