当前位置: 首页 > 编程日记 > 正文

iOSSharing #9 | 2019-05-19

目录

1. setNeedsLayout、layoutIfNeeded与layoutSubviews区别?

2. UIView与CALayer的区别?

3. loadView什么时候被调用?它有什么作用?默认实现是怎么样的?

4. UIViewController的完整生命周期?

5. UIView动画支持的属性有哪些?

1. setNeedsLayout、layoutIfNeeded与layoutSubviews区别?

(1)、setNeedsLayout

用于更新视图以及其子视图布局,不会立即更新,是一个异步方法,需要在主线程调用。该方法将视图以及其子视图标记,在下一个更新周期执行更新操作,不知道具体更新时间。

关于setNeedsLayout,官方文档描述如下:

Call this method on your application’s main thread when you want to adjust the layout of a view’s subviews. This method makes a note of the request and returns immediately. Because this method does not force an immediate update, but instead waits for the next update cycle, you can use it to invalidate the layout of multiple views before any of those views are updated. This behavior allows you to consolidate all of your layout updates to one update cycle, which is usually better for performance.

(2)、layoutIfNeeded

用于更新视图以及其子视图布局,立即更新,不会等待更新周期,从根视图开始更新视图子树,若无待更新的布局,直接退出。

关于layoutIfNeeded,官方文档描述如下:

Use this method to force the view to update its layout immediately. When using Auto Layout, the layout engine updates the position of views as needed to satisfy changes in constraints. Using the view that receives the message as the root view, this method lays out the view subtree starting at the root. If no layout updates are pending, this method exits without modifying the layout or calling any layout-related callbacks.

(3)、layoutSubviews

一般是在autoresizing或者 constraint-based的情况下重写此方法。常用场景是当视图不是使用frame初始化的时候,我们可以在此方法进行一些精细化布局。如子视图相对于父视图使用约束布局,子视图init时,不具有frame直到约束建立,因为不知道约束建立完成时机,而我们又确实需要frame进行一些计算,为确保计算时拿到的frame不为空,此时,我们可以将计算的过程放于此,并配合setNeedsLayout或者layoutIfNeeded进行视图刷新。

关于layoutSubviews,官方文档描述如下:

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.

You should not call this method directly. If you want to force a layout update, call the setNeedsLayout method instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded method.

2. UIView与CALayer的区别?

  • UIView可以响应事件,CALayer不可以响应事件
  • 一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame
  • UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制
  • 在做 iOS 动画的时候,修改非 RootLayer的属性(譬如位置、背景色等)会默认产生隐式动画,而修改UIView则不会。

3. loadView什么时候被调用?它有什么作用?默认实现是怎么样的?

1)、什么时候被调用?

每次访问UIViewController的view(比如controller.view、self.view)而且view为nil,loadView方法就会被调用。

2)、有什么作用?

loadView方法是用来负责创建UIViewController的view

3)、默认实现是怎样的?

默认实现即[super loadView]里面做了什么事情。

a)、 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view

  • 如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
复制代码
  • 如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
[[MyViewController alloc] init]; // 加载MyViewController.xib
复制代码

b) 、如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下

self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];复制代码

[super loadView]里面就大致完成a)和b)中叙述的内容

Tips:
若要自己重写loadView方法,此时为节省开销,应避免调用[super loadView]方法。

4. UIViewController的完整生命周期?

按照执行顺序排列:

  • init初始化ViewController
  • loadView当view需要被展示而它却是nil时,viewController会调用该方法。如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。
  • viewDidLoad执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。
  • viewWillAppear视图将出现在屏幕之前,马上这个视图就会被展现在屏幕上了;
  • viewDidAppear视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反;
  • viewWillDisappear视图将被从屏幕上移除之前执行
  • viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了
  • viewWillUnload如果当前有能被释放的view,系统会调用viewWillUnload方法来释放view
  • viewDidUnload当系统内存吃紧的时候会调用该方法,在iOS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是iOS 3.0及以后viewDidUnload方法是更好的方式。在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行。
  • dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放.关于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话,viewDidUnload将会被执行,本视图的所有子视图将被销毁以释放内存,此时开发者需要手动对viewLoad、viewDidLoad中创建的对象释放内存。因为当这个视图再次显示在屏幕上的时候,viewLoad、viewDidLoad 再次被调用,以便再次构造视图。

5. UIView动画支持的属性有哪些?

  • frame: 位置和大小
  • bounds
  • center
  • transform
  • alpha
  • backgroundColor
  • contentStretch

基本用法:

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
复制代码

参数说明:

  • duration :整个动画持续的时间
  • delay:动画在多久之后开始,值为 0 表示代码执行到这里后动画立刻开始
  • options:一些有关动画的设置,例如想要动画刚开始比较快,到快结束时比较慢,都在这里设置。
  • animations:在这个 block 中写入你想要执行的代码即可。block 中对视图的动画属性所做的改变都会生成动画
  • completion:动画完成后会调用,finished 表示动画是否成功执行完毕。可以将动画执行完成后需要执行的代码写在这里

相关文章:

分表处理(三)

一、概述分表是个目前算是比较炒的比较流行的概念,特别是在大负载的情况下,分表是一个良好分散数据库压力的好方法。首先要了解为什么要分表,分表的好处是什么。我们先来大概了解以下一个数据库执行SQL的过程:接收到SQL –> 放…

逻辑回归(Logistic Regression)简介及C++实现

逻辑回归(Logistic Regression):该模型用于分类而非回归,可以使用logistic sigmoid函数( 可参考:http://blog.csdn.net/fengbingchun/article/details/73848734 )将线性函数的输出压缩进区间(0,1): p(y1| x;θ)σ(θTx).逻辑回归是…

CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?

作者 | 路一直都在出品 | AI科技大本营(ID:rgznai100)Paper link:https://arxiv.org/pdf/1904.02701.pdfCode link:https://github.com/OceanPang/Libra_R-CNNAbstract在目标检测中,人们更关注的往往是模型结构&#x…

实现nginx上配置免费证书Let's Encrypt

Lets Encrypt 的免费证书有效期为三个月,不过可以免费续期,写一个脚本定期更新即可。 准备一台nginx 服务器 ,将以下三个附件上传到你的nginx服务器。 1、下载脚本文件,wget https://raw.githubusercontent.com/xdtianyu/scripts/…

深入解析Windows操作系统笔记——CH1概念和术语

1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具... 1 1.1操作系统版本... 1 1.2基础概念和术语... 2 1.2.1Windows API2 1.2.2 服务、函数和例程... 3 1.2.3 进程、线程和作业... 4 1.2.3.1 进程... 4 1.2.3.2 线程... 4 1.2.3.3 虚拟地址描述符... 4…

C++/C++11中std::exception的使用

std::exception&#xff1a;标准异常类的基类&#xff0c;其类的声明在头文件<exception>中。所有标准库的异常类均继承于此类&#xff0c;因此通过引用类型可以捕获所有标准异常。 std::exception类定义了无参构造函数、拷贝构造函数、拷贝赋值运算符、一个虚析构函数和…

技术不错的程序员,为何面试却“屡战屡败”

为何很多有不少编程经验&#xff0c;技术能力不错的程序员&#xff0c;去心仪公司面试时却总是失败&#xff1f;至于失败的原因&#xff0c;可能很多人都没意识到过。01想要通关面试&#xff0c;千万别让数据结构拖了后腿很多公司&#xff0c;比如 BAT、Google、Facebook&#…

FastJson 转换 javaBean 时 null 值被忽略都问题

[toc] 问题 当 JavaeBean 中某个属性值为 null 时&#xff0c;转换为 JSONObject 对象或者 json 字符串时&#xff0c;该属性值被忽略。如何让不管值是否为 null&#xff0c;转化后该属性还存在&#xff0c;只是值为 null。 情况演示 class St {private String sid;private Str…

来玩Play框架07 静态文件

作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Play框架的主要功能是提供动态响应的内容。但一个网络项目中必然有大量的静态内容&#xff0c;比如图片、Javascript文件、CSS文件等。我下面介绍…

C++/C++11中std::runtime_error的使用

std::runtime_error&#xff1a;运行时错误异常类&#xff0c;只有在运行时才能检测到的错误&#xff0c;继承于std::exception&#xff0c;它的声明在头文件<stdexcept>中。std::runtime_error也用作几个运行时错误异常的基类&#xff0c;包括std::range_error(生成的结…

估值被砍700亿美元后,Waymo发重磅公开信:即将推出全自动驾驶打车服务

&#xff08;图片源自 Waymo 官网&#xff09;编译 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;近日&#xff0c;据 Reddit 盛传的一封电子邮件副本显示&#xff0c;Alphabet 旗下的自动驾驶汽车公司 Waymo 已经向其自动驾驶服务的用户发送了一封电子邮件&…

Swoft 2 Beta 发布,基于 Swoole 的云原生协程框架

Swoft 是首个基于 Swoole 原生协程的框架&#xff0c;从开发到发布据今已有2年多。 1.x 发布以来&#xff0c;已有大量的开发人员和企业使用&#xff0c;得到了大家的认可。从去年11月份开始&#xff0c;将近半年的时间从零开始&#xff0c;底层吸取之前经验&#xff0c;基于 S…

Linux中源码包的管理

什么是开放源码&#xff0c;编译程序和可执行文件开放源码&#xff1a;就是程序代码,写给人类看的程序语言,但机器不认识,所以无法执行&#xff1b;编译程序&#xff1a;将程序代码转译成为机器看得懂的语言&#xff1b;可执行文件&#xff1a;经过编译程序变成二进制程序后,机…

支持向量机(SVM)简介

支持向量机(support vector machine, SVM)&#xff1a;是监督学习中最有影响力的方法之一。类似于逻辑回归&#xff0c;这个模型也是基于线性函数wTxb的。不同于逻辑回归的是&#xff0c;支持向量机不输出概率&#xff0c;只输出类别。当wTxb为正时&#xff0c;支持向量机预测属…

首届中文NL2SQL挑战赛:千支队伍参赛,国防科大夺冠

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;整理 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】10月12日&#xff0c;追一科技主办的首届中文NL2SQL挑战赛在激烈的决赛中落下帷幕&#xff0c;冠军由国防科技大学学生组…

怎么使用CAD编辑器来打开图纸中的所有图层

在CAD绘图中&#xff0c;建筑设计师们不仅要对CAD图纸进行编辑&#xff0c;还要对CAD图纸进行查看&#xff0c;一张图纸中是有许多图层的&#xff0c;那在查看的过程中有的时候把其他的图层进行隐藏了&#xff0c;那如果想要把隐藏的CAD图层进行打开要怎么操作&#xff1f;如何…

域名年龄-SEO搜索引擎优化

为什么80%的码农都做不了架构师&#xff1f;>>> 域名年龄-SEO搜索引擎优化 在我们创建一个新的网站时&#xff0c;我们首先考虑到的是去注册一个新的域名。 有时发现我们 要注册的域名已经被注册了&#xff0c;于是就有两种方式&#xff1a; 一、重新注册另外的…

log库spdlog简介及使用

spdlog是一个开源的、快速的、仅有头文件的C11 日志库&#xff0c;code地址在 https://github.com/gabime/spdlog &#xff0c;目前最新的发布版本为0.14.0。它提供了向流、标准输出、文件、系统日志、调试器等目标输出日志的能力。它支持的平台包括Windows、Linux、Mac、Andro…

多模态人物识别技术及其在视频场景中的应用 | CSDN技术公开课

不用倍速播放&#xff0c;还有什么功能可以让你高效追剧&#xff1f;爱奇艺的「只看TA」了解一下&#xff1f;而这个功能背后离不开多模态人物识别技术的支撑。识别视频中的人物涉及哪些信息&#xff1f;只有人脸识别就足够了吗&#xff1f;其实不然&#xff0c;这样一个看似简…

研究人员测试27个黑客服务 结果仅三个完成任务

现代电子邮件帐户不仅是一个电子邮件地址&#xff0c;它还是人们在网络上的身份的基础&#xff0c;可用于申请各种网络服务或重置服务密码&#xff0c;以便持有电子邮件的黑客服务帐户很受欢迎&#xff0c;为了了解这些服务的功能&#xff0c;谷歌和加州大学圣地亚哥分校的研究…

CIF、QCIF

分辨率&#xff1a; 每个像素的存储方式都是YUV QQCIF:88*72 QCIF:176*144 CIF:352*288 2CIF:704*288 DCIF:584*384 4CIF:704*576 QCIF&#xff1a; QCIF: Quarter Common Intermediate Format 英文缩写 qcif 英文全称 Quarter Common Intermediate Format 中文解释 四分之一通…

OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用

OpenCV 3.3中给出了支持向量机(Support Vector Machines)的实现&#xff0c;即cv::ml::SVM类&#xff0c;此类的声明在include/opencv2/ml.hpp文件中&#xff0c;实现在modules/ml/src/svm.cpp文件中&#xff0c;它既支持两分类&#xff0c;也支持多分类&#xff0c;还支持回归…

Facebook发布Detectron2,下一个万星目标检测新框架

作者 | CV君来源 | 我爱计算机视觉&#xff08;ID&#xff1a;aicvml&#xff09;Detectron是Facebook于2018年发布的专注于目标检测的深度学习框架&#xff0c;基于Caffe2深度学习框架&#xff0c;实现了众多state-of-the-art算法&#xff0c;其与商汤-香港中文大学MMLab实验室…

include和require的区别

细节决定成败&#xff01; 1.引用文件方式 对include()来说&#xff0c;在include()执行时文件每次都要进行读取和评估&#xff1b;而对于require()来说&#xff0c;文件只处理一次&#xff08;实际上&#xff0c;文件内容替换了require()语句&#xff09;。这就意味着如果有包…

libsvm库简介及使用

libsvm是基于支持向量机(support vector machine, SVM)实现的开源库&#xff0c;由台湾大学林智仁(Chih-Jen Lin)教授等开发&#xff0c;它主要用于分类(支持二分类和多分类)和回归。它的License是BSD-3-Clause&#xff0c;最新发布版本是v322。libsvm具有操作简单、易于使用、…

Cron 表达式极速参考

Cron表达式&#xff1a; * * * * * * *这些星号由左到右按顺序代表 &#xff1a; [秒] [分] [小时] [日] [月] [周] [年] 序号说明 是否必填 允许填写的值 允许的通配符1 秒 是 0-59 , - * /2 分 是 0-59…

刘群:华为诺亚方舟NLP预训练模型工作的研究与应用 | AI ProCon 2019

演讲嘉宾 | 刘群&#xff08;华为诺亚方舟实验首席科学家&#xff09;编辑 | Jane出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;预训练语言模型对自然语言处理领域产生了非常大的影响&#xff0c;在近期由CSDN主办的 AI ProCon 2019 上&#xff0c;自然…

NuGet 无法连接到远程服务器-解决方法

一、 Entity Framework以下简称EF 安装EF4.3的步骤是首先安装VS扩展 NuGet&#xff0c;然后再使用NuGet安装EF程序包 安装完NuGet就可以安装EF了&#xff0c;有两种方式可以安装EF&#xff1a; 1.使用命令 install-package EntityFramework -Pre 但出现如下错误: 2.使用可视化工…

Facebook开源模型可解释库Captum,这次改模型有依据了

作者 | Narine Kokhlikyan, Vivek Miglani, Edward Wang, Orion Reblitz-Richardson译者 | Rachel出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】前脚 TF 2.0 刚发布&#xff0c;在 PyTorch 开发者大会首日也携 PyTorch1.3 版本而来。除此之外&a…

K-最近邻法(KNN)简介

K-最近邻法(K-Nearest Neighbor, KNN)最初由Cover和Hart于1968年提出&#xff0c;是一个在理论上比较成熟的分类算法。KNN是一类可用于分类或回归的技术。作为一个非参数学习算法&#xff0c;K-最近邻并不局限于固定数目的参数。我们通常认为K-最近邻算法没有任何参数&#xff…