2024年IOS笔试题题库_第1页
2024年IOS笔试题题库_第2页
2024年IOS笔试题题库_第3页
2024年IOS笔试题题库_第4页
2024年IOS笔试题题库_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、即时聊天App不会采取的网络传输方式

A.UDP

B.TCP

C.HTTP

D.FTP

FTP:是文献传输协议,是FileTransferProtocol的简称,它

的作用是用于控制互联网上文献的双向传输,因此一定不会是即

时聊天使用的;

UDP:是面对无连接的传输层协议,数据传输是不可靠的,它只

管发,无论收不收得到;

TCP:是面对连接的,可靠的传输层协议;

HTTP:是超文本传输协议,对应于应用层,而HTTP是基于TCP

的。

有关socket理论基础知识,更详细可阅读下面的文章:Socket

理论知识

参考答案:D

---------------可爱的分割线-----------------

2、下列技术不属于多线程的是

ABlock

BNSThread

CNSOperation

DGCD

苹果提供了NSThread、NSOperation.GCD这三种技术用于

处理多线程。

对于NSThread是需要自己管理其生命周期的;

对于NSOpeartion也是常用的技术之一,一般与

NSOperationQueue一起配合使用;

对于GCD是平时见到最多的,使用起来很以便,而它与block配

合起来使用,简单并且简洁。

Block不是一项技术,只是代码段,不过具备自动捕捉上下文信

息的功效,与函数指针有点类似,其实全局函数就是特殊的

block0

有关NSOperation/NSOperationQueue,可阅读笔者的文章:

多线程之NSOperatoin/NSOperationQueue;

参考答案:A

---------------可爱的分割线-----------------

3、线程和进程的区分不正确的是

A进程和线程都是由操作系统所提供的程序运行的基本单元

B线程之间有单独的地址空间

C进程和线程的重要差异在于它们是不一样的操作系统资源管

理方式

D线程有自己的堆栈和局部变量

这是学习操作系统知识的时候常常会考试的内容,不过在工作中

常常会遇到多线程处理问题。一般来说,一个进程就代表着一个

应用程序,而操作系统为了愈加好的利用资源,提供了线程用于

处理并发。线程之间没有有单独的地址空间,处理完成之后还得

回到根本程,因此,一个线程死掉就等于整个进程死掉。进程和

线程都是操作系统的基本单元,只是分工不一样,是两种不一样

的资源管理方式。线程所需要的资源都来自于进程,它没有自己

独立的资源,也就没有自己的堆栈和局部变量。

修正:这里参考答案与描述不符合的问题。

参考答案:B

---------------可爱的分割线-----------------

4、堆和栈的区分正确的是

A对于栈来讲,我们需要手工控制,轻易产生memoryleak

B对于堆来说,释放工作由编译器自动管理,无需我们手工控

C在Windows下,栈是向高地址扩展的数据结构,是连续的内存

区域,栈顶的地址和栈的最大容量是系统预先要求好的

D对于堆来讲,频繁的new/delete势必会导致内存空间的不连

续,从而导致大量的碎片,使程序效率减少

栈是由编译器管理的,不是我们手动控制,不过栈所能分派的内

存是比较少的,假如要处理大数据,则需要在堆上分派,因此在

栈上比较轻易出现MemoryLeak;

对于堆,需要我们自己申请内存,同时也需要我们自己手动释放,

否则会导致内存泄露;对于堆,假如过多地申请内存空间,会导

致内存空间不连接,从而导致内存碎片,使程序效率减少。

参考答案:D

---------------可爱的分割线-----------------

5、下列回调机制的了解不正确的是

Atarget-action:当两个对象之间有上就紧密的关系时,如视图

控制器与其下的某个视图。

Bdelegate:当某个对象收到多个事件,并要求同一个对象来

处理所有事件时。委托机制必须依赖于某个协议定义的方去来发

送消息。

CNSNotification:当需要多个对象或两个无关对象处理同一个

事件时。

DBlock:适脚回调只发生一次的简单任务。

对于Target・Action机制,要求两个对象之间有比较紧密的联

系,例如在控制器与cell之间,可通过设置target为控制器对象,

而action则为控制器中的某个回调措施;

对于Delegator机制,它是苹果提供的标准回调机制,一般会提

供一个标准的协议,然后由代理类遵守协议,最常用的使用方法

是反向传值,例如打开蓝牙后要反馈给前一个界面蓝牙的开关状

态;

对于通知,一般是多对多的关系,它并不关心是谁要处理消息,

任意对象都能够注册通知到通知中心,当发送通知时,所有注册

了该通知的对象都能够收到消息。最常用的场景是跨模块,例如

登录模块与其他模块有着非常紧密的联系,不过登录成功后各个

地方也许需要做某些处理,因此一般会在登录成功或者登出成功

后发送通知,以便各个需要处理的模块得到正确的处理;

对于Block是相称简单的,它只适合用于一对一的关系,例如在

做某个操作成功或者失败后回调。

参考答案:B

---------------可爱的分割线-----------------

6、对于runloop的了解不正确的是

A每一个线程都有其对应的RunLoop

B默认非根本程的RunLoop是没有运行的

C在一个单独的线程中没有必要去启用RunLoop

D能够将NSTimer添加到「unloop中

说到RunLoop,它可是多线程的法宝。一般来说,一个线程一

次只能执行一个任务,执行完任务后就会退出线程。不过,对于

根本程是不能退出的,因此我们需要让根本程即时任务执行完

成,也能够继续等候接收事件而不退出,那么RunLoop就是核

心法宝了。不过非根本程一般来说就是为了执行某一任务的,执

行完成就需要偿还资源,因此默认是不运行RunLoop的。

每一个线程都有其对应的RunLoop的,只是默认只有根本程的

RunLoop是开启的,其他子线程的RunLoop默认是不开启的,

若要开启则需要手动开启。

在一个单独的线程中,假如需要在处理完某个任务后不退出,继

续等候接收事件,则需要启用RunLoop。

NSRunLoop提供了一个添加NSTime「的措施,能够指定

Mode,假如要让任何情况下都回调,则需要设置Mode为

Common模式。

实质上,对于子线程的runloop默认是不存在的,因为苹果采取

了懒加载的方式。假如我们没有手动调用[NSRunLoop

currentRunLoop],就不会去查询是否存在目前线程的

RunLoop,也就不会去加载,更不会创建。

下面是CFRunLoop的部分源码:

//shouldonlybecalledbyFoundation

//t==0isasynonymfor"mainthread"thatalways

works

CF_EXPORTCFRunLoopRef

_CFRunLoopGetO(pthread_tt){

if(pthread_equal(t,kNilPthreadT)){

t=pthread_main_thread_np();

}

—CFSpinLock(&loopsLock);

if(!—CFRunLoops){

—CFSpinUnlock(&loopsLock);

CFMutableDictionaryRefdiet=

CFDictionaryCreateMutable(kCFAIIocatorSystemDefaul

t,0zNULL,&kCFTypeDictionaryValueCallBacks);

CFRunLoopRcfmainLoop=

—CFRunLoopCreate(pthread_main_thread_np());

CFDictionarySetValue(dict,

pthreadPointer(pthread_main_thread_np())z

mainLoop);

if(!OSAtomicCompareAndSwapPtrBarrier(NULLzdiet,

(void*volatile*)&—CFRunLoops)){

CFRelease(dict);

}

CFRelease(mainLoop);

—CFSpinLock(&loopsLock);

}

CFRunLoopRefloop=

(CFRunLoopRef)CFDictionaryGetValue(_CFRunLoops,

pthreadPointer(t));

_CFSpinUnlock(&loopsLock);

if(!loop){

CFRunLoopRefnewLoop=_CFRunLoopCreate(t);

_CFSpinLock(&loopsLock);

loop=

(CFRunLoopRcf)CFDictionaryGctValuc(_CFRunLoops,

pthreadPointer(t));

if(!loop){

CFDictionarySetValue(_CFRunLoops,

pthreadPointer(t)znewLoop);

loop=newLoop;

}

//don'treleaserunloopsinsidetheloopsLock,

becauseCFRunLoopDeallocatemayenduptakingit

—CFSpinUnlock(&loopsLock);

CFRelease(newLoop);

}

if(pthread_equal(t,pthread_self())){

_CFSetTSD(_CFTSDKeyRunLoop,(void*)loop,

NULL);

if(0==_CFGetTSD(_CFTSDKeyRunLoopCntr)){

_CFSetTSD(_CFTSDKeyRunLoopCntr,(void

*)(PTHREAD_DESTRUCTOR_ITERATIONS-1)Z(void

(*)(void*))_CFFinalizeRunLoop);

}

)

returnloop;

核心加载过程如下:

检查全局字典里是否存在该线程的runLoop,假如有则退出,否

创建一个新的runLoop放到全局字典中

参考答案:C

---------------可爱的分割线-----------------

7、断点续传需要在祈求头中添加的控制续传最重要的核心字

Arange

Blength

Ctype

Dsize

理由:对于实现文献的断点续传和断点下载,需要设置祈求头中

的Range实体头,指定第一个字节的位置和最后一个字节的位

置,而与之对应的响应头有Content-Range,指示了整个实体

的长度及部分插入位置,如Content-Range:bytes

0-500/801,指定了范围为目前范围与文献总大小。

参考答案:A

---------------可爱的分割线-----------------

8、MVC优点不正确的是

A低耦合性

B高重用性和可合用性

C较低的生命周期成本

D代码高效率

理由:MVC只是一个构架设计模式,它的出既有比较久的历史

了。Model-Controller-View是在开发中最常见到的架构设计模

式,通过将Model、View、Controller三者相互联系,以Model

作为数据加工厂,以Controller作为桥梁,处理业务,而View

只是数据展示层,理应与业务无关。MVC设计模式减少了耦合

性,提供了重用性和合用性,可有效地提升开发效率。

参考答案:D

可爱的分割线

9、混编ObjC和C++的源码文献需要将文献格式的后缀改为

A.c

B.cpp

C,mm

D.m

理由:ObjC要想与C++源代码文献混编,那么就需要将文献后

缀改为.mm。这个没有什么可细说了,记住就好了!

参考答案:C

---------------可爱的分割线-----------------

10、ObjC申明一个类所要用到的编译指令是

A©interfaceSomeClass

B©protocolSomeClass

C@implementationSomeClass

D@autoreleaseSomeClass

理由:A是申明类的指令;B是申明协议的指令;C是实现类的定

义的指令;D是申明自动释放池的指令。

参考答案:A

---------------可爱的分割线-----------------

llxMRC文献在ARC工程混合编译时,需要在文献的

CompilerFlags上添加什么参数

A-shared

B-fno-objc-arc

C-fobjc-arc

D-dynamic

理由:对于ARC工程中,假如要混编MRC文献,需要在工程的

CompilerFlags添力1-fno-bojc-arx;对于MRC工程中,假如

要混编ARC文献,需要设置为-fobjc-arc。

参考答案:B

---------------可爱的分割线-----------------

12.下面有关Objective-C内存管理的描述错误的是

A当使用ARC来管理内存时,代码中不能够出现autorelease

Bautoreleasepool在drain的时候会释放在其中分派的对

C当使用ARC来管理内存时,在线程中大量分派对象而不用

autoreleasepool则也许会导致内存泄露

D在使用ARC的项目中不能使用NSZone

理由:ARC只是在大多时候编译自动为我们添加上内存管理的代

码,只是我们的源代码看不到而已,不过在编译时,编译器会添

加上有关内存管理代码。对于自动释放池,在drain时会将自动

释放池中的所有对象的引用计数减一,若引用计数为0,则会自

动释放掉其内存。假如在线程中需要大量分派内存,我们理应添

加上自动释放池,以防内存泄露。例如在for循环中要分派大量

的内存处理数据,那么我们应当在for循环内添加自动释放池,

在每个循环后就将内存释放掉,预防内存泄露。在ARC项目中,

自然不能手动使用NSZone,也不能调用父类的dealloc。

参考答案:A

---------------可爱的分割线-----------------

13.下面哪个不属于对象数据序列化措施

AJSON

BPropertyList

CXML

DHTTP

理由:数据序列化是将对象的数据转化成某一个格式的数据,在

ios开发中最常用的就是JSON,部分企业会采取XML,笔者从未

遇到过使用PropertyList来传输数据的,不过我们通过会将某

些小量的数据存储到PropertyList中,例如NSUserDefaults

就是操作plist文献的。而HTTP是超文献传输协议,只是一个协

议。

参考答案:D

---------------可爱的分割线---

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论