1 生命周期

  1. init方法中view仍然是nil,此时,如果写了self.view,直接调用loadView。
  2. 看名字也知道,loadView在viewDidLoad之前。
  3. initWithNibName:bundle:,designated初始化方法

2 代码组织

  1. init,只有需要传一些参数的时候,才需要 不要出现self.view,只做普通属性赋值(如model,详情页url等)
  2. viewDidLoad中 组装好subview
  3. viewWilAppear中 处理数据相关,处理系统级任务(比如statusbar、网络监听等)
  4. viewDidLayoutSubviews中 处理布局
  5. subview在getter中初始化
  6. 瘦身 ViewModel/Present + category、RAC

一个不符合规范的案例,会导致错误。

//first vc
+ (instancetype)initWithUrl:(NSString *)url {ViewController *controller = [ViewController new];    //已经在next vc的init中执行了viewDidLoad,而此时url还没有传过去controller.url = url;return controller;
}//next vc
#pragma mark - life cycle
- (instancetype)init {self = [super init];if(self) {[self.view addSubview: self.webView];   //应该写在viewDidLoad中}return self;
}- (void)viewDidLoad {    //下面两句应该写在viewWillAppear:中[self startLoading];[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.url]]];
}
复制代码

3 一些应用

3.1 ChildVC + ScrollView

比如头条,上面有一个横拉的栏目View,下面才是ChildVC的view 做法:ScrollView + VCs

  • ScrollView中实际上是多个childVC的根view
  • 创建childVC的时候,设置好frame,包括横向偏移量。

注意

  1. 因为[scrollView addSubview:childVC.view],已经调用了childVC.view,所以这是已经调用了childVC的loadView和viewDidLoad方法。
  2. addChildViewController后,childVC的生命周期方法,如viewWillAppear、viewDidAppear等,就跟随父VC了自动处理。

优化:

  1. 可以使用displayVC,cachedVCs,缓存数组,内存预警或进入后台时清理cachedVCs。
  2. 点击专栏引发的更换VC,
/添加一个 childViewController
UIViewController *vc = [UIViewController new];
[self addChildViewController:vc];
vc.view.frame = ..;
[self.view addSubview:vc.view];
[vc didMoveToParentViewController:self];//移除一个 childViewController
[vc willMoveToParentViewController:nil];
[vc.view removeFromSuperview];
[vc removeFromParentViewController];
复制代码

3.2 ChildVC + UIPageViewController

实现相册浏览功能,图片放缩

4 通用做法

4.1 隐藏状态栏

#pragma mark - statusbar
-(BOOL)prefersStatusBarHidden {return YES;
}
复制代码

转载于:https://juejin.im/post/5d077f815188252354279659

UIViewController 小结相关推荐

  1. IOS中scrollsToTop问题小结

    2019独角兽企业重金招聘Python工程师标准>>> scrollsToTop小结: UIScrollView是用来展示滚动的一个类.他有UITableView.UITextVie ...

  2. 苹果内购小结 - iOS

    此篇针对 iOS 支付进行一次小结,很久没碰这块了,有些方法 Apple 官方也进行了优化,故也将随之进行更新. 首先,code 部分将分为两部分,一部分在 appdelegate 中,另一部分单独封 ...

  3. 【阶段小结】协同开发——这学期的Git使用小结

    [阶段小结]协同开发--这学期的Git使用小结 一.Git简介 1. Git简单介绍 2. Git工作流程以及各个区域 3. Git文件状态变化 二.Git安装&Git基本配置 三.个人踩坑 ...

  4. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  5. php中$_REQUEST、$_POST、$_GET的区别和联系小结

    php中$_REQUEST.$_POST.$_GET的区别和联系小结 作者: 字体:[增加 减小] 类型:转载 php中有$_request与$_post.$_get用于接受表单数据,当时他们有何种区 ...

  6. c cin.get()的用法小结_c语言中static 用法

    static在c里面可以用来修饰变量,也可以用来修饰函数. 先看用来修饰变量的时候.变量在c里面可分为存在全局数据区.栈和堆里.其实我们平时所说的堆栈是栈而不是堆,不要弄混. int a ; int ...

  7. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结

    Linux下常见文件格式的压缩.解压小结 .tar 解包: tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ...

  8. 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  9. flash 入门课知识小结

    一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧) 1. 特点   帧--是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以 ...

最新文章

  1. 整数转罗马数字 python
  2. Hadoop hdfs 从指定偏移量读取文件数据代码示例
  3. 4位快速加法器和4位串行加法器相比_使用混合信号示波器调试串行总线系统
  4. 如何在 Windows Server 中配置权威时间服务器
  5. VC2008 Windows Media Player控件的使用技巧
  6. 20. 顺时针打印矩阵
  7. RGBA 图片格式转换 RGB 无损
  8. 使用python将文字转为语音
  9. golang tailf日志组件的基本使用
  10. ad模数转换采集电压程序c语言,单片机怎么通过AD转换得到电压值
  11. Word文档里面如何给内容进行注释添加
  12. 未来5年互联网,运营将成比产品更加有前途的职业?
  13. 瑞幸咖啡第四季营收24亿:同比增80.7% 门店总数超6000家
  14. Notes 20180311 : String第三讲_深入了解String
  15. 欠钱不还直接打,打到还钱才停
  16. 机器学习api_开发人员会喜欢的10种机器学习API
  17. android屏幕录制功能,Android利用ADB进行屏幕录制
  18. 计算机房七氟丙烷气体灭火系统设计 施工安,计算机房七氟丙烷气体灭火系统...
  19. 服务通知——小程序消息推送、模板消息推送demo
  20. 美创科技OSM助力长安大学迈上信息化新台阶

热门文章

  1. proguard android 配置,android – Proguard忽略库的配置文件
  2. rabbitmq取消自动重连_rabbitmq客户端自动重连
  3. matlab入门之旅,MATLAB 入门之旅学习笔记
  4. cad指定服务器名称,配置网络许可服务器 | AutoCAD 2022 | Autodesk Knowledge Network
  5. 收集一些实用的电脑使用习惯和操作技巧
  6. 后端技术:SpringBoot 中实现跨域的5种方式
  7. ASP.NET+MVC+使用+Log4net+记录日志笔记
  8. MYSQL中表级锁、行级锁、页级锁介绍
  9. Linux进程的概念笔记
  10. 提现接口网站 php,API提现接口