2019iOS面试题总结

1.苹果推送的原理

1.1由App向iOS设备发送一个注册通知,用户需要同意系统发送推送。

1.2iOS向APNs远程推送服务器发送App的Bundle Id和设备的UDID。

1.3APNs根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。

1.4App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。

1.5当自己的服务器想发送推送时, 在远程推送服务器中输入要发送的消息并选择发给哪些用户的deviceToken,由远程推送服务器发送给APNs。

1.6APNs根据deviceToken发送给对应的用户。

原文地址:https://www.jianshu.com/p/75161fc153cd

2.CALayer和UIView的区别

2.1每个 UIView 内部都有一个 CALayer 在背后提供内容的绘制和显示,并且 UIView 的尺寸样式都由内部的 Layer 所提供。两者都有树状层级结构,layer 内部有 SubLayers,View 内部有 SubViews.但是 Layer 比 View 多了个AnchorPoint

2.2在 View显示的时候,UIView 做为 Layer 的 CALayerDelegate,View 的显示内容由内部的 CALayer 的 display

2.3CALayer 是默认修改属性支持隐式动画的,在给 UIView 的 Layer 做动画的时候,View 作为 Layer 的代理,Layer  通过 actionForLayer:forKey:向 View请求相应的 action(动画行为)

2.4layer 内部维护着三分 layer tree,分别是 presentLayer Tree(动画树),modeLayer Tree(模型树), Render Tree (渲染树),在做 iOS动画的时候,我们修改动画的属性,在动画的其实是 Layer 的 presentLayer的属性值,而最终展示在界面上的其实是提供 View的modelLayer

2.5两者最明显的区别是 View可以接受并处理事件,而 Layer 不可以

原文地址:https://www.jianshu.com/p/079e5cf0f014

3.UI视图之间的事件传递和响应

3.1我们点击屏幕产生触摸事件,系统将这个事件加入到一个由UIApplication管理的事件队列中,UIApplication会从消息队列里取事件分发下去,首先传给UIWindow

3.2在UIWindow中就会调用hitTest:withEvent:方法去返回一个最终响应的视图

3.3在hitTest:withEvent:方法中就回去调用pointInside: withEvent:去判断当前点击的point是否在UIWindow范围内,如果是的话,就会去遍历它的子视图来查找最终响应的子视图

3.4遍历的方式是使用倒序的方式来遍历子视图,也就是说最后添加的子视图会最先遍历,在每一个视图中都回去调用它的hitTest:withEvent:方法,可以理解为是一个递归调用

3.5最终会返回一个响应视图,如果返回视图有值,那么这个视图就作为最终响应视图,结束整个事件传递;如果没有值,那么就会将UIWindow作为响应者

原文地址:https://www.jianshu.com/p/2c16077b50f8

4.tableView的优化

4.1懒加载创建tebleview

4.2复用cell,设置唯一标识符

4.3图片圆角:a.直接让美工把图片切成圆角进行显示,这是效率最高的一种方案;b.很多情况下用户上传图片进行显示,可以让服务端处理圆角;c.使用代码手动生成圆角Image设置到要显示的View上,利用UIBezierPath(CoreGraphics框架)画出来圆角图片

4.4避免快速滑动,开启过多线程

4.5异步加载图片[imageView sd_setImageWithURL:url completed:^(UIImage*image,NSError*error, SDImageCacheType cacheType,NSURL*imageURL) {imageView.image = image;}];

4.6优化cell高度,将高度提前计算好存入Model中

4.7尽量避免图片透明,使用不透明视图, 如非必要, 可以设置opaque为yes,用以减少复杂图层合成

4.8cellForRowAtIndexPath不要做耗时操作,读取文件/写入文件,尽量不要去添加和移除view;

4.9尽量设置layer的大小值为整形值

4.10使用ShadowPath指定layer阴影效果路径;当我们需要圆角效果时,可以使用一张中间透明图片蒙上去

5.iOS中如何使用socket

建立Socket连接至少需要一对套接字,分别运行于服务端(ServerSocket)和客户端(ClientSocket)。套接字直接的连接过程氛围三个步骤:5.1服务器监听:服务端Socket始终处于等待连接状态,实时监听是否有客户端请求连接。5.2客户端请求:客户端Socket提出连接请求,指定服务端Socket的地址和端口号,这时就可以向对应的服务端提出Socket连接请求。5.3连接确认:当服务端Socket监听到客户端Socket提出的连接请求时作出响应,建立一个新的进程,把服务端Socket的描述发送给客户端,该描述得到客户端确认后就可建立起Socket连接。而服务端Socket则继续处于监听状态,继续接收其他客户端Socket的请求。

原文地址:https://www.jianshu.com/p/8e599ca5dfe8参考文章:https://www.jianshu.com/p/cf30e90c8269

6.AFNetWorking的实现原理

在ios开发中,一般情况下,简单的向某个web站点简单的页面提交请求并获取服务器的响应,用xcode自带的NSURLConnection是能胜任的。但是,在绝大部分下我们所需要访问的web页面则是属于那种受到权限保护的页面,并不是有一个简单的URL可以访问的。这就涉及到了Session和Cookie的处理了,在此时使用NSURLConnection也是能够达到要求的,只是其中处理起来的复杂度和难度就提升了。  为了更好的处理向Web站点的请求,包括处理Session,Cookie等细节问题,使用AFNetworking则是更好的选择,他可以用于发送HTTP请求,接收HTTP的响应,但是不会缓存服务器的响应,不能执行HTML页面中的JAvascript代码,同时,AFNetworking还内置支持JSON,plist文件和XML文件的解析,使用比较方便。 扩展:1、Session:中文有译作时域的,就是只某个客户端在访问服务器起到停止访问这一段的时间间隔被称为时域。 2、Cookie:由服务器发送给客服端,把Cookie的key:value值储存在本地文件夹下,当下次请求的时候能够直接发送Cookie获得权限验证

原文地址:https://blog.csdn.net/lcg910978041/article/details/51485062

7.runtime的原理和作用

7.1原理:a.runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API。在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者。b.RunTime简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制。c.对于C语言,函数的调用在编译的时候会决定调用哪个函数,编译完成之后直接顺序执行,无任何二义性。d.OC的函数调用成为消息发送。属于动态调用过程。在编译的时候并不能决定真正调用哪个函数(事实证明,在编 译阶段,OC可以调用任何函数,即使这个函数并未实现,只要申明过就不会报错。而C语言在编译阶段就会报错)。e.只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

7.2作用:a. 动态的添加对象的成员变量和方法,修改属性值和方法b. 动态交换两个方法的实现c. 实现分类也可以添加属性d. 实现NSCoding的自动归档和解档e. 实现字典转模型的自动转换f. 动态创建一个类(比如KVO的底层实现)

原文地址:https://www.jianshu.com/p/462b88edbe5c

8.MVC,MVP,MVVM设计模式区别及优缺点

MVC优点:a.耦合性低,视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。b.重用性高c.生命周期成本低d.MVC使开发和维护用户接口的技术含量降低e.可维护性高,分离视图层和业务逻辑层也使得WEB应用更易于维护和修改f.部署快

MVC缺点:a.不适合小型,中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。b.视图与控制器间过于紧密连接,视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。c.视图对模型数据的低效率访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。


MVP特点:a.M、V、P之间双向通信。b.View 与 Model 不通信,都通过 Presenter 传递。Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。c.View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。d.Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变,这样就可以重用。不仅如此,还可以编写测试用的View,模拟用户的各种操作,从而实现对Presenter的测试–从而不需要使用自动化的测试工具。

MVP优点:a.模型与视图完全分离,我们可以修改视图而不影响模型;b.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部;c.我们可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑。这个特性非常的有用,因为视图的变化总是比模型的变化频繁;d.如果我们把逻辑放在Presenter中,那么我们就可以脱离用户接口来测试这些逻辑(单元测试)。

MVP缺点:视图和Presenter的交互会过于频繁,使得他们的联系过于紧密。也就是说,一旦视图变更了,presenter也要变更。


MVVM模式和MVC模式类似,主要目的是分离视图(View)和模型(Model),有几大优点:a.低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的”View”上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。b.可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。c.独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。d.可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写。

原文地址:https://blog.csdn.net/weixin_34294649/article/details/86753644

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,037评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,059评论 0 12
  • 在生活中我们不难发现这样的现象: 1、突然想上厕所,我们第一时间不是准备好纸巾,而是确认下拿了手机没有,利用蹲马桶...
    Cody小安阅读 729评论 0 2
  • 前些日子适逢爷爷七十大寿,全家人收拾行李前去为爷爷祝寿。故乡的天真的特别蓝,云也特别烂漫。在长沙待了这么久,总有种...
    林之风兮阅读 248评论 0 1
  • 今天出门在外,一路追着雨水跑。无论东南西北,每到一处,都是潇潇雨歇,刚刚停下来。没有经过风吹雨打之苦。老公说:是我...
    往事如烟胖婆婆阅读 1,281评论 28 35