iOS面试题系列之UI相关

2021 iOS面试题大全---全方面剖析面试(一) (答案不唯一,仅供参考,文章最后有福利) 一. iOS面试题—UI相关:事件传递,图像显示,性能优化,离屏渲染 UIView与CALayer 事件传递与视图响应链 图像显示原理 UI卡顿掉帧原因 滑动优化方案 UI绘制原理 离屏渲染 一、UIView与CALayer [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0SmOTbu-1627041880722)(//upload-images.jianshu.io/upload_images/1782258-e729ed. 阅读详情

1、简述app启动周期。

打开应用程序,它先会执行main函数,再执行UIApplicationMain函数。初始化
UIApplication,设置代理对象,开启事件循环,调用代理方法进行事件处理。

首先会调用application:didFinishLaunchingWithOptions:代理方法。


接下来会调用applicationDidBecomeActive:代理方法。监听系统事件,结束程序。当程序正常退出UIApplicationMain函数才会返回。

监听系统事件:

锁屏后app会调用:applicationWillResignActive:代理方法。然后接着调用
applicationDidEnterBackground:方法。

解锁后app会调用:applicationWillEnterForeground:代理方法。接着调用
applicationDidBecomeActive代理方法。

杀死进程会调用:applicationWillTerminate:代理方法。

接听电话:先调用applicationWillResignActive:代理方法。挂断电话后会直接进入
应用调:applicationDidBecomeActive:代理方法。

出现内存警告会调用:applicationDidReceiveMemoryWarning:代理方法

2、 简单的说说UIApplication的作用及继承关系。

(1)UIApplication是继承UIResponder的。UIApplication是整个应用程序的核
心。每一个程序在运行期必须有UIApplication(或子类)的一个实例(有且只有一
个),通过[UIApplication shareApplication]可以得到这个单例实例。

(2)UIApplication帮助管理应用程序的生命周期,通过delegate来履行任务。

(3)UIApplication可以接收事件,把所有用户事件都放入队列,逐个处理。它会发送
当前事件给一个合适的目标控件进行处理。他还将部分事件转给delegate对象来处理。
delegate可以处理的事件包括:应用程序的生命周期事件(如程序启动与关闭)、系统事
件(如来电)。

3、 简述推送消息原理。

(1)应用程序注册接收远程通知的时候,系统会发送请求到APNS服务器。APNS服务器收
到请求后会根据请求所带的key值生成一个独一无二的deviceToken。然后APNS服务器会把deviceToken包装成NSData对象发送到对应请求的App上。接下来APP把deviceToken发送给我们自己的服务器(Provider)。服务器接收到deviceToken后进行存储等相关处理。服务器会把推送给用户的消息发送至APNS服务器,最后APNS服务器再发送通知给app。

(2)有关于deviceToken变化问题:
重新安装或卸载应用程序,deviceToken不会发生变化。
系统升级deviceToken可能会发生变化。
抹掉所有内容和设置,重置设备后,deviceToken会变化

(3)注册远程通知方法
注册远程通知:
一般在app启动完成的时候注册远程通知,注册方法一般在didFinishLaunchingWithOptions:代理方法中
处理注册远程通知回调方法:
注册成功会回调didRegisterForRometoNotificationsWithDeviceToken:其中的deviceToken参数就是APNS服务器返回的token。
注册失败会回调didFailToRegisterForRemoteNotificationsWithError:

(4)处理接收到的远程通知消息
程序启动时,app从Terminate状态进入Foreground状态时,会根据didFinishLaunchingWithOptions:代理方法中的luanchOptions参数来获取userInfo。判断是否有推送消息。方式如下:

// userInfo为收到远程通知的内容
NSDictionary*userInfo=launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo) { // 有推送的消息,处理推送的消息 }
如果app处于Background状态时,只有用户点击了通知消息才会调用didReceiveRemoteNotification:,如果当前app处于Foreground状态,会直接调用该方法。

4、 简单说下UITableView、UIButton、UIWindow控件的继承关系。

(1)UITableView的继承关系:UITableView继承UIScrollView。UIScrollView继承UIView。UIView继承UIResponder。UIResponder继承NSObject。

(2)UIButton的继承关系:UIButton继承UIControl,UIControl继承UIView。UIView继承UIResponder,UIResponder继承NSObject。

(3)UIWindow继承UIView。

5、 UIView与UIButton有什么区别?UISwitch呢?

UIView继承自UIResponder,它能响应某个动作。UIButton继承UIControl。它不仅可以响应某个动作,还能为某个对象添加对应的动作加以响应。
UIButton也能实现UISwitch的功能,它们的区别是分发的事件不一样。

6、 简述UIControl的继承关系,它用来做什么?

UIControl继承UIView。UIView继承UIResponder,UIResponder继承NSObject。它能为某个特定对象添加事件。能进行事件分发。

7、 简述UIViewController中view的生命周期。

先调用loadView方法,再调用viewDidLoad方法,调用viewWillAppear方法,调用viewWillLayoutSubviews方法,调用viewDidLayoutSubviews方法,再调用viewDidApper方法。控制器消失的时候先调用viewWillDisappear方法,再调用viewDidDisapper方法。最后调用dealloc方法。当出现内存警告的时候会调用didReceiveMemoryWarning方法。

8、 简述UITableView的代理方法调用顺序。

先调用numberOfSectionsInTableView:方法,

numberOfRowsInSection:

heightForRowAtIndexPath:

cellForRowAtIndexPath:

9、 你在用CollectionView的时候有没有遇到什么问题?问题是怎么解决的?

刷新的时候会闪烁。在刷新的时候会默认附加一个隐式的fade动画。可以通过取消动画来达到取消闪烁的目的。

10、 简述UIResponder类的作用。

UIResponder类主要是为那些需要响应并处理事件的对象定义了一组接口。这些事件包括:触摸事件、运动事件、远程控制事件(如耳机控制音视频播放)。当用户触发某一事件时,UIKit会创建一个UIEvent事件对象,事件对象会加入到一个FIFO先进先出的队列中。UIApplication对象处理事件时,会从队列头部取出一个事件对象进行分发。

11、 如何监听View的触摸事件?事件如何传递?简述视图的响应者链。

可以通过View类的touchesBegan、touchesMoved、touchesEnded、touchesCancelled方法监听视图的触摸。

当触摸一个视图对象时,系统会捕捉此事件,并给这个事件创建一个UIEvent对象,将此对象加入当前应用程序的事件队列中,然后由UIApplication对象从队列中取出来进行事件分发,首先会分发给UIWindow对象,然后由UIWindow对象分发给触摸的视图对象,即第一响应者对象。

响应者链:当事件交给第一响应者处理,如果第一响应者不处理,事件就会沿着响应者链向上传递,交给下一个响应者。一般来说,第一响应者是一个视图对象或者是其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象,然后是它的父视图对象,以此类推,直到顶层视图。接下来会沿着顶层视图到UIWindow对象,再到UIApplication对象。如果整个过程都没有响应这个事件,该事件就会被丢弃,一般情况下,在响应者链中只要有对象处理事件,事件就会停止传递。有时候可以在视图的响应方法中根据一些条件判断来决定是否需要继续传递事件。

12、 CALayer与UIView有什么区别?

(1)UIView是iOS系统中界面元素的继承。所有的界面元素都继承自它,他本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个叫CALayer的类来管理。UIView本身更像是一个CALayer的管理器,访问它的跟绘图和跟坐标有关的属性,如frame,bounds等,实际上内部都是在访问它所包含的CALayer的相关属性。

(2)UIView有个layer属性,可以返回它的主CALayer实例,UIView有一个layerClass方法,返回主layer所使用的类,UIView的子类,可以通过重载这个方法,来让UIView使用不同的CALayer来显示。

(3)UIView的CALayer类似UIView的子View树形结构,也可以向它的layer上添加子layer。

(4)CALayer坐标系统与UIView有点不一样,它多了一个anchorPoint的属性。

(5)UIView的layer树形在系统内部,被系统维护着三份copy。逻辑树,动画树,显示树。

(6)CALayer默认修改属性支持隐式动画

(7)View可以接受并处理事件,Layer不可以。

13、 如何优化UITableView?

(1)复用单元格

(2)使用不透明的视图,单元格中少使用动画。

(3)图片使用异步加载,设置图片加载的并发数。

(4)滑动时不加载图片,停止滑动时再加载。

(5)图片和文字可以直接drawRect

(6)如果cell是动态行高,计算缓存单元格高度

(7)尽量少reloadData,只reloadRowsAtIndexPaths

(8)cell高度固定直接用rowHeight属性设置高度。

14、 简述加载到控制器上的根视图创建与加载时机。

视图控制器的根视图加载是在UIViewController的loadView方法中。当视图控制中的loadView方法被调用时,会先通过NSBundle加载,通过控制器的类名作为xib文件名加载xib文件,如果存在,加载View为根视图,如果不存在,则自动创建一个View作为根视图。

15、 简述UITableView中cell的复用机制。

UITableView会创建屏幕显示单元格个数(N)+1个单元格,当滑动到第N+2个单元格时就会复用第1个单元格。UITableView中还有单元格复用池的概念。
当tableView调用初始化单元格协议方法获取单元格时,它会根据你设定的reuse identifier先去复用池中查找可用的复用单元格,找到则复用该单元格,没找到这创建一个新的单元格对象。

本文内容中部分来自网络,后续会持续更新完善。欢迎一起学习交流!

如需转载,请注明出处

iOS面试题系列之UI相关

今日头条面试——iOS开发面试题 layoutIfNeeded和setNeedsLayout的区别。* Pod update和pod install的区别。* 10、autoreleasepool的使用场景。* 如何hook一个对象的方法,而不影响其它对象。* 数组cop后里面的元素会复制一份新的吗。* 介绍项目,主要介绍自己强项一点的地方。* assing可以使用在对象中吗。* isEquel和hash的关系。* 4、谈谈runtime的理解。* 8、谈谈runloop的理解。* copy和strong的区别。 阅读详情

相关推荐

吊打面试官系列之:移动APP测试开发面试题汇总,对标P7职位~ ~熬夜整理,建议收藏!!!

移动App测试开发面试题汇总1、引言2、基础篇2.1开篇介绍,APP测试流程2.2 移动APP测试需要准备环境资源2.3 移动APP测试和Web测试的区别2.4、移动APP专项测试2.5 Android手机和IOS手机,系统有什么区别?2.6 IOS和Android的APP测试有什么区别?2.7 如何抓取日志2.8 adb常用命令2.9 adb三个组件是指?3、进阶篇3.1 介绍一下Android四大组件?3.1.1 Android四大基本组件:3.1.2 分别介绍四大组件:3.2 Activity生命周期

商务合作 | 面试培训 | 职场规划 ==>主页扫码 1万+

iOS 面试第四节 UIKit框架

UIKit框架1.UIView 和 CALayer 是什么关系?2.Bounds 和 Frame 的区别?3.setNeedsDisplay 和 layoutIfNeeded 两者是什么关系?4.谈谈对UIResponder的理解5.loadView的作用?6.使用 drawRect有什么影响?7.keyWindow 和 delegate的window有何区别 1.UIView 和 CALayer...

木头书屋专栏 438

鱼眼相机矫正实战:除了棋盘格,试试横向展开和经纬度法(OpenCV4/C++实现对比)

本文对比了鱼眼相机矫正的三种主流方法:棋盘格标定法、横向展开法和经纬度法,通过OpenCV4/C++实战代码解析,帮助开发者在自动驾驶、VR全景拼接和安防监控等场景中选择最适合的技术方案。重点分析了各方法的精度、处理速度和适用场景,为工程实践提供实用指导。

weixin_29032489的博客 283

iOS面试题-UI篇

http://www.360doc.com/content/20/0630/21/31460730_921535347.shtml 这里有关于面试方面汇总:关于iOS面试题汇总(栏目持续更新)https://www.jianshu.com/p/8af16aa3e48d size Classes具体使用 对屏幕进行分类 uIView和CALayer是什么关系? UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观, UIV

henry_lei的博客 515

极具性价比的步进电机驱动芯片-TMC2226/TMC2209使用小结

TMC2226/2209相对于TMC2660C、TMC5160来说,价格低了很多,同时功能并没有太多阉割。对比TMC5160,少了内部加减速曲线,电流足够(Ipeak = 2.8A),相对5160而言功能也很足够,所以毫无疑问TMC2226是极具性价比的步进驱动芯片。

Trinamic_TMC的博客 6994

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月12日-生产期间维护用的双重隔离

生产期间维护用的双重隔离。该程序用于准备将一个或多个双工位设置为维护状态,同时SABRE 3D/3DxT/3D Scimitar保持生产运行。其目的是在不中断生产的情况下将双工位与运行中的设备隔离。

weixin_46735260的博客 573

IOS面试题目(稍微深度型)

1.把block保存到对象中去,等到恰当的时机再使用(外部调用),可以用来传值。 2.把block当成方法的参数使用,外部不调用,外部只是实现,函数内部调用 3.block作为返回值

飞落的眼泪的专栏 5409

IMU预积分【SLAM】

预积分的推导过程比较多,所以这里只记录关键结论。 其实这些公式不太好记忆,因为预积分推导过程的想法来源很巧妙,无法看出物理意义。一切推导的来源: 最好记忆的旋转相对运动量: △Rij≐RiTRj=∏k=ij−1Exp((ω~k−bg,k−ηgd,k)△t)\triangle R_{ij} \doteq R_{i}^{T}R_{j} = \prod_{k=i}^{j-1}Exp((\tilde{\omega}_{k}-b_{g,k}-\eta_{gd,k})\triangle t) △Rij​≐RiT​Rj​

Tong_1024_的博客 1368

iOS【BAT大公司面试题 ~ 非常好的面试题】

前言: 在朋友群里老是看到好多人因为工作而苦恼,就随手从自己的笔记和网上选取了自己感觉还不错的iOS面试题,和大家分享下,共同学习,互相勉励!现在随着iOS平台开发的职位的增加,笔试、面试也越来越有“套路”,这里我总结了一些BAT面试题(还有网上收集的经典面试题),多数是Objective-C,适合于面试新人,有的借鉴他人的答案,有的是我自己答的,不准确的地方,欢迎私聊或者评论指出。

阿俊的博客 3102

App inventor2通过蓝牙控制Arduino Uno LED开关

App inventer2控制Arduino Uno LED开关 如果学会这个小程序,大部分的手机通过蓝牙控制Arduino的功能都可以实现,这个小示例是通过蓝牙模块向Arduino发送"0"和"1",而其它功能要发送其它不同的字符串内容给Arduino. 所需硬件: Arduino Uno JDY-16 蓝牙模块(我的是蓝牙4.2版本) 草帽LED(可选) 手机(我用的是安卓,苹果手机应该也可以,最近其应用商店也有App inventor(AI)伴侣) 软件: Aduino IDE或者Platfom

Firmin123456的博客 5495

YOLOv13改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 已更新种不同的改进方案,专栏内的每篇文章皆,均可顺利运行。2️⃣ 订阅专栏即可进群获取以及从的各种答疑内容。3️⃣ 全新的YOLOv13改进专栏,,只为更好的满足论文发表的要求。专栏内容,专栏实时评分,全网最高,质量保证。🎫。。

Limiiiing的博客 9143

ios面试题,各大企业常见的ios面试题之一

经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案。 1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗? 答案:Objecitve-C的重要特性是R

wangyunfeis的博客 2539

通过采用下面方法检查内容,还是系统无法更新下载,但是错误代码变成了——下载错误 - 0x80004002-到底如何解决?必须重装系统吗?-这个到底是系统问题,还是硬件问题?

‌。

qq_15963745的博客 335

iOS基础面试题(四)

继续总结一些面试题,以后的面试题难度会有所增加 iOS面试题系列: iOS如何面试 iOS面试题(一) iOS面试题(二) iOS面试题(三) iOS进阶面试题----Block部分 iOS进阶面试题----多线程部分 1 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画? 答案:Bl

hmxiao_1983的专栏 778

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

黑马程序员——iOS进阶面试题——黑马 ios 技术博客

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- OneV‘s Den在博客里出了10道iOS面试题,用他的话是:“列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术” 。 在这里給一份我的答案。 1. 你使用过Objective-C的运行时编程(Runtime

黑马程序员杜梦秋的技术博客专栏 702

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

iOS进阶面试题

OneV‘s Den在博客里出了10道iOS面试题,用他的话是:“列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术” 。 在这里給一份我的答案。 1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗? Objecitv

iShareStudio 948

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

iOS面试总结 - 3. iOS高级面试题

1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?   Objecitve-C的重要特性是Runtime(运行时),在#import 下能看到相关的方法,用过objc_getClass()和class_copyMethodList()获取过私有API;使用   ```

IOS进阶 999

iOS中级面试题

OneV‘s Den在博客里出了10道iOS面试题,用他的话是:"列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术" 。 在这里給一份我的答案。 1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗? Obje...

Coding 498

面试题ios

iOS面试题(九)- 高级开发工程师 JUN 14TH, 2014 OneV‘s Den在博客里出了10道iOS面试题,用他的话是:“列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术” 。 在这里給一份我的答案 寻亚楠的专栏 1.你使用过Objective-C的运行时编程(Runtime Program

z997756128的专栏 2598

【面试-八股文】万字app测试 面试题,助你吊打面试官系列

大家好,我是温大大。 最近温大大的读者们问我有没有app相关的面试题, 作为「平易近人」的大大怎么能忍心说没有呢, 这不继续爆肝 输出app测试工程师专项面试题, 本篇从:app测试基础、app 测试场景(覆盖7大场景 + 100 多个测试点,直接可以拿来用)、app工具 Appium/ Fiddler/ Monkey 介绍、app 常见问答定位、app 环境安装 这些个纬度大家全面解析app面试题。 配合前面三篇八股文,无敌... Linux 万字总结 Mysql 入门到入土 网络 100道高频面试题

u011493462的博客 4778

iOS电话面试题库

1. 简述push原理,push的证书和其它的右什么不一样?  第 一阶段:BeejiveIM服务器把要发送的消息、目的iPhone的标识打包,发给APNS。  第二阶段:APNS在自身的已注册Push服务 的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。  第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。 2. vie

Chen_Yilong的专栏 2583

iOS进阶面试题----经典10道

OneV‘s Den在博客里出了10道iOS面试题,用他的话是:"列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术" 。 在这里給一份我的答案。 1. 你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法...

weixin_30652879的博客 148
上一篇: iOS面试题系列之常见算法
下一篇: iOS面试题大全2021(附答案)
Skinny Camel
博客等级 码龄15年 71粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值