iOS程序员面试分类模拟9.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

iOS程序员面试分类模拟9

简答题

1.?UIView和CALayer的区别与联系是什么?

正确答案:

1.UIView和CALayer是什么?

??CALayer是动画中经常使用的一个类,它包含在Qu(江南博哥)anzCore框架中。CALayer类在概念上和UIView类似,同样是一些被层级关系树管理的矩形块,也可以包含一些内容(像图片、文本或者背景色),管理子图层的位置。它们有一些方法和属性用来做动画和变换。使用CoreAnimation开发动画的本质就是将CALayer中的内容转化为位图供硬件操作。

??CALayer是一个比UIView更底层的图形类,是对底层图形API(OpenGLES)一层层封装后得到的一个类,用于展示一些可见的图形元素,保留了一些基本的图形化操作,但同时由于相对高度的封装,使得操作使用变得很简单。CALayer用于管理图形元素,甚至可以制作动画,它保留了一些几何属性,如位置、尺寸、图形变换等。一般的CALaver是作为UIView背后的支持角色,在创建了一个UIViewr的同时也存在一个相应的CALayer。UIView作为CALayer的代理角色去实现一些功能,例如常见的为UIView制作一个圆角,就会用到UIView背后的layer操作:

??view.layer.cornerRadius=10;

??CALayer可以通过UIView很方便地展示操作UI元素,但是CALayer自身单独也可以展示和操作可见元素,且灵活度更高,它自身有一些可见可设置的属性,如背景色、边框、阴影等。

??另外,UIView简单来说是一个可以在里面渲染可见内容的矩形框,它里面的内容可以和用户进行交互,UIView可以对交互事件进行处理。除了其背后CALayer的图形操作支持,UIView自身也有像设置背景色等最基本的属性设置。

??2.UIView和CALayer的联系

??UIView和CALayer的主要联系上面已经提到,CALayer在UIView背后提供更加丰富灵活的图形操作,UIView作为CALayer的代理更加快速地帮CALayer显示一些常用的UI元素并提供交互。

??另外,UIView类是所有视图的基类,CALayer是图层类。事实上,UIView和CAlayer是平行的层级关系。每一个UIView都有一个CALayer实例的图层属性,视图的责任就是创建并管理图层,以确保当子视图在层级关系中被添加或者被移除的时候,与它们相关联的图层也同样在层级关系树中有相同的操作。

??3.UIView和CALayer的区别

??1)CALayer无法响应用户事件。UIView和CALayer的最明显区别在于它们的可交互性,即UIViewr可以响应用户事件,而CALayer不可以,原因可以从这两个类的继承关系上看出(见图)。UIView是继承自UIResponder的,决定了UIView类及其子类能够通过响应链(iOS通过视图层级关系来传递触摸事件)接收并响应用户事件。而CALayer直接继承于NSObject类,所以它不清楚具体的响应链,也就无法响应用户事件。

??

??CALayer和UIView继承关系

??2)分工不同。UIView类侧重于对显示内容的管理和整体布局,而CALayer侧重于显示内容的绘制、显示和动画。

??3)所属框架不同。UIView类是属于UIKit.framework框架的,UIKit框架主要就是用来构建用户界面的。CALayer类是属于QuartzCore.framework框架的,而且CALayer是作为一个低级的,可以承载绘制内容的底层对象出现在该框架的。

?

2.?为什么iOS中提供UIView和CALayer这两个平行的层级结构呢?

正确答案:

iOS中提供UIView和CALayer这两个平行层级结构主要是为了做到职责分离,实现视图的绘制、显示和布局解耦,避免很多重复的代码。在iOS和MacOS两个平台上,事件和用户交互有很多地方并不相同,毕竟基于多点触控的用户界面和基于鼠标键盘有着本质的区别,这就是为什么iOS有UIKit和UIView,但是MacOS有Appkit和NSView的原因。它们功能虽然相似,但是在实现上有着显著的区别。创建两个层次结构就能够在iOS与MacOS之间共享代码,从而使得开发更加便捷。

?

3.?UIWindow是什么?有什么特点和作用?

正确答案:

从下图中的继承关系会发现UIWindow居然是UIView的子类,因为UIWindow在应用中是作为根视图来承载UIViewr元素的,也就是说根父视图是子视图的子类,有点违背直觉。

??

??CALayer和UIView继承关系

??但事实

文档评论(0)

江南博哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档