当前位置: 代码迷 >> 综合 >> iOS面试-名词解释
  详细解决方案

iOS面试-名词解释

热度:93   发布时间:2023-12-17 01:10:01.0

1.MVC
Model,View,Controller,是iOS开发中典型的设计模式。比如通过HTTP把网络数据下载并解析然后存于自己的数据模型Model中,然后通知Controller去刷新界面,通过Controller将View和Model进行关联,这种模式就叫MVC。这样的好处是可以隔离数据模型Model和View界面,遵循了低耦合的设计思想。

2.代理与协议
代理是一种概念,协议是一种技术,代理是用协议来实现的,代理是2个对象之间通讯的一种方式。
代理主要做反向传值的,一般用在1:1(一对一)的两个对象通讯上,实现系统的一些回调方法,比如scrollerview滑动事件,选择照片,asi网络下载完成等。

3.block
block类似于c中的回调函数,和代理类似的,类似于java中的listener匿名函数

4.代理和通知中心/广播/NoficationCenter
代理主要是反向传值,一般用在1:1的两个对象通讯上
通知中心是通过注册然后接收事件的一种n:n(多对多)的方法
(什么是通知中心:通知中心是多对多的平等的通讯模式,主要用在多个对象之间松耦合的通讯模式。对象和对象之间通过通知的名字就可以进行关联通讯)
(什么是委托代理模式:委托代理是2个对象之间的一种通讯方式,一方使用协议,代理另外一方实现协议,类似于回调,blocks等语法,目的是为了软件设计的低耦合)

5.KVC/KVO
KVC:Key vaule coding,KVC是路径访问的规范,KVC是满足被观察的编码规范
KVO:Key value observer,KVO是观察某个变量的变化过程,KVO可以观察某个对象的变量的变化过程。
(什么是KVC和KVO?
答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,
(1)首先根据方法名找到运行方法的时候所需要的环境参数。
(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。
(3)再直接查找得来的具体的方法实现。
(KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。

6.单例
单例就是在多个对象之间共享数据,类似于全局变量,比如数据库打开一次,多个界面都可以使用。

7.工厂
统一管理对象的实例化
你的程序简单体现不出来,如果大规模的企业程序里要创建成千上万个对象,每个都去new,程序的业务逻辑
就很混乱,统一由工厂创建,就比清晰。
工厂就是你要什么去到工厂里拿就好了,工厂负责生产,你除了使用什么都不用管,小程序你看不出优势来,打个比方说如果12亿人人,一人一个电视,那么如果每个人都去工厂里制造是多么麻烦的事,你只要告诉他你要什么类型的,工厂会生产出来给你,这个就是通俗意义上的工厂模式了。
至于说使用这个的好处,可以方便的更改应用程序,方便扩展。比如说你修改了一个类,或者在这个类的基础上生成了一个子类那么你现在要把以前使用父类的地方都给改为子类,如果小程序可能有几十个地方要改,如果大一点可能就几百几千个地方要改了。如果使用工厂模式,你只要改一个地方就可以了。

8.oc内存管理
1.new,alloc,copy,retain这些对象都需要我们主动的release或者autorelease
2.如果是类方法创建的对象,那么系统自动释放池自动会在适当的时候帮我们release
3.ARC Xcode自动会帮我们人工智能的添加release或者autorelease的操作。

9.深拷贝/浅拷贝
浅拷贝只是拷贝对象本身,不会对里面的子对象进一步拷贝。
深拷贝会对子对象以及子对象的子对象进一步的拷贝。

10.归档
归档是很常用的文件存储方法,几乎任何类型的对象都能被归档存储。归档也叫序列化,是将文件存在硬盘。

11.plist
plist文件通常用于存储用户设置,也可以用于存储捆绑的信息。由于plist中存储的数据是抽象的,其采用的文件格式不止一种。

12.数据库
iOS sqlite数据库操作的步骤是:
先加入sqlite开发库libsqlite3.dylib,
新建或打开数据库
创建数据表
插入数据
查询数据并打印

13.coredata
coredata框架并非严格的说,CoreData是对sqlite数据库的一个封装
sqlite数据库操作的基本流程是,创建数据库,再通过定义一些字段来定义表格结构,可以利用SQL语句向表格中插入记录,删除记录,修改记录,表格之间也可以建立联系。这个过程出现了表格的结构,所有表格的结构和相互联系构成整个数据库的模型,数据库存放的方式(可以使文件或者在内存),数据库操作,SQL语句(主要是查询),表格里面的记录。

14.复用机制
一般是对UIScrollview做复用机制,因为UIScrollview滚动窗口没有复用,所以要做,原理就是超过屏幕的view不能销毁,而要放在复用队列/池里面存放起来,然后以后要在scrollerview现实view首先不要alloc创建,而要首先去复用池里面找有没有可复用的view,如果没有就alloc,如果有就直接用。

15.http协议与Socket协议
HTTP启动一个NSUrlConnection在didFinish长连接。因为和服务器连接的过程非常复杂,也耗时,所以连接一次。HTTP短连接只要处理完就断掉,下次重新连接对服务器的负担小。长连接对服务器的压力很大。

16.get/post
get和post是HTTP请求方式的两种。
post是安全的。get是不安全的,get是放在浏览器中的地址暴露出来了,post不会。但是在App上get和post都看不见。
get和post都是和服务器提交参数/通讯的一种方式。
get参数不能太长<1024B POST没有限制<4G
get不能上传文件,post可以上传文件

17.TCP/UDP
TCP的全称是传输控制协议,这种协议可以提供面向连接的,可靠的,点到点的通信;
UDP的全称为用户数据协议,它可以提供非连接的不可靠的点到多点的通信。
用TCP还是UDP,那要看你的程序注重的是哪一个方面?可靠还是快速?

18.解释TCP/IP协议
TCP/IP是网络开发中常见的传输协议,它传输和UDP相比是可靠的。
HTTP是基于TCP/IP的主要用户互联网的协议
所谓可靠是TCP传输对方会给一个ACK即确认信号
TCP传输不如DUP传输快,吞吐量不如DUP大
TCP是顺序的,UDP是无序的
TCP会保持连接,DUP不会保持连接
在我们iOS开发中用HTTP较多,HTTP协议是一个被动式的

19..瀑布流你是怎么理解和实现的?
1.如果简单的来说,用3个tableview就可以实现瀑布流,3个tableview实现联动滚动
2.其实最好的做法是在scrollview上使用3个复用队列,如果一种一个cell超过屏幕,不能release,而是把它回收到复用队列中,如果要创建一个cell,首先从复用队列中取一个,然后使用。

20.TCP/IP 建立连接的过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手。

21.缓存
许多人认为“缓存”是内存的一部分,还有许多不知道缓存在什么地方,缓存是做什么用的
其实,缓存是CPU的一部分,它存在于CPU中。CPU存取数据的速度非常快,缓存是为了解决CPU速度和内存速度的速度差异问题。
因为缓存只是内存中少部分的数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
缓存又分为一级缓存和二级缓存。一级缓存和二级缓存中的内容都是内存中访问频率高的数据的复制品(映射),它们的存在都是为了减少高速CPU对慢速内存的访问。通常CPU找数据或指令的顺序是:先到一级缓存中找,找不到再到二级缓存中找,如果还找不到就只有到内存中找了

22.正则表达式
正则表达式又称正规表达式、常规表示法(Regular Expression)。正则表达式使用单个字符串描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常用来检索、替换那些符合某个模式的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。正则表达式这个概念最初是由Unix中的工具软件普及开的。

23.多线程:
多线程是一个比较轻量级的方法来实现单个应用程序内多个代码执行路径。
从技术角度来看,一个线程就是一个需要管理执行代码的内核级和应用级数据结 构组合。内核级结构协助调度线程事件,并抢占式调度一个线程到可用的内核之上。 应用级结构包括用于存储函数调用的调用堆栈和应用程序需要管理和操作线程属性 和状态的结构。
(2.在应用程序中存 在多个线程提供了两个非常重要的的潜在优势:
? 多个线程可以提高应用程序的感知响应。
? 多个线程可以提高应用程序在多核系统上的实时性能。

(3.线程 进程 任务的区别?
? 线程(线程)用于指代独立执行的代码段。 ? 进程(process)用于指代一个正在运行的可执行程序,它可以包含多个线程。
? 任务(task)用于指代抽象的概念,表示需要执行工作。

24.下拉刷新:
一般说到上拉刷新下拉刷新,很多人就会想到就是用第三方源框架EGORefresh.而用自己写代码如何实现,UITableView本身就是一个UIScrollView,所以UITableView可以实现UIScrollView的代理方法。上拉和下拉刷新无非就是UIScrollView偏移到一定程度调用刷新方法,实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView代理方法即可。

25.二维码:
二维码又称二维条码,是在一维条码的基础上扩展出的一种具有可读性的条码。设备扫描二维码,通过识别条码的长度和宽度中所记载的二进制数据,可获取其中所包含的信息。相比一维条码,二维码记载更复杂的数据,比如图片,网络链接等。

26.流媒体:
所谓流媒体是指采用流式传输的方式在Internet/Intranet播放的媒体格式,如音频、视频或多媒体文件。流媒体在播放前并不下载整个文件,只将开始部分内容存入内存,在计算机中对数据包进行缓存并使媒体数据正确地输出。流媒体的数据流随时传送随时播放,只是在开始时有些延迟。显然,流媒体实现的关键技术就是流式传输,流式传输主要指将整个音频和视频及三维媒体等多媒体文件经过特定的压缩方式解析成一个个压缩包,由视频服务器向用户计算机顺序或实时传送。在采用流式传输方式的系统中,用户不必像采用下载方式那样等到整个文件全部下载完毕,而是只需经过几秒或几十秒的启动延时即可在用户的计算机上利用解压设备对压缩的A/V、3D等多媒体文件解压后进行播放和观看。此时多媒体文件的剩余部分将在后台的服务器内继续下载。与单纯的下载方式相比,这种对多媒体文件边下载边播入的流式传输方式不仅使启动延时大幅度地缩短,而且对系统缓存容量的需求也大大降低,极大地减少用户用在等待的时间。
流媒体可以边下载边播放,与平面媒体不同。流媒体最大的特点在于互动性,这也是互联网最具吸引力的地方。

27.堆栈
堆栈是一种执行“后进先出”算法的数据结构。它在内存中开辟一个存储区域,数据一个一个顺序地存入这个区域之中。有一个地址指针总指向最后一个压入堆栈地数据所在地数据单元,存放这个地址指针地寄存器就叫做堆栈指示器。
堆栈是计算机中最常用地一种数据结构,比如函数地调用在计算机中使用堆栈实现的。
堆栈可以用数组存储,也可以用链表存储。

28.队列
队列的特性是先进先出,先进队列的元素先出队列,来源于我们生活中的队列(先排队的先办完事)
队列可以由数组和链表两种形式实现队列操作。

29.排序
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。

33.md5/base64编码
MD5: 全称为message digest algorithm 5(信息摘要算法), 可以进行加密, 但是不能解密, 属于单向加密, 通常用于文件校验
Base64: 把任意序列的8位字节描述为一种不易为人识别的形式, 通常用于邮件、http加密. 登陆的用户名和密码字段通过它加密, 可以进行加密和解密.

34.soap协议
简单对象访问协议soap协议一般是指简单对象访问协议,简单对象的访问协议是交换数据的一种协议规范,是一种轻量的,简单的,基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。 (webService三要素:SOAP WSDL UDDI)

35.蓝牙
是一种支持设备短距离通信的无限电技术,主要用于相关外设(周边设备)的无线信息交换,利用蓝牙技术,能够有效的简化移动终端之间的通信,蓝牙支持点对点,点对多的通信,工作在2.4GHz下,与Wi-Fi等通信一样,随着移动终端的火热,物联网也依靠着移动终端飞速发展。(蓝牙分为2.0和4.0版本 4.0是2012年出来的最新蓝牙版本 蓝牙4.0至少需要设备iPhone在4S以上,iPad在2以上,并且要求系统版本不低于iOS5.1才可以,使用coreBluetooth框架)

32.XMPP
XMPP协议简介XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
1、什么是XMPP ? XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;核心的XML流传输协议基于XML流传输的即时通讯扩展应用XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
2、XMPP的基本网络结构是怎样的?XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
3、XMPP通过TCP传什么了?传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。