iOS超全面试题,面试前看一看,不错<下篇>

80. 死锁的4个必要条件
java

答:互斥、请求保持、不可剥夺、环路ios

81. 死锁的处理程序员

答:鸵鸟策略、预防策略、避免策略、检测与解除死锁web

82. cocoa touch框架sql

答:iPhone OS 应用程序的基础 Cocoa Touch 框架重用了许多 Mac 系统的成熟模式,可是它更多地专一于触摸的接口和优化。数据库

UIKit 为您提供了在 iPhone OS 上实现图形,事件驱动程序的基本工具,其创建在和 Mac OS X 中同样的 Foundation 框架上,包括文件处理,网络,字符串操做等。编程

Cocoa Touch 具备和 iPhone 用户接口一致的特殊设计。有了 UIKit,您可使用 iPhone OS 上的独特的图形接口控件,按钮,以及全屏视图的功能,您还可使用加速仪和多点触摸手势来控制您的应用。api

各色俱全的框架 除了UIKit 外,Cocoa Touch 包含了建立世界一流 iPhone 应用程序须要的全部框架,从三维图形,到专业音效,甚至提供设备访问 API 以控制摄像头,或经过 GPS 获知当前位置。xcode

Cocoa Touch 既包含只须要几行代码就能够完成所有任务的强大的 Objective-C 框架,也在须要时提供基础的 C 语言 API 来直接访问系统。这些框架包括:安全

Core Animation:经过 Core Animation,您就能够经过一个基于组合独立图层的简单的编程模型来建立丰富的用户体验。

Core Audio:Core Audio 是播放,处理和录制音频的专业技术,可以轻松为您的应用程序添增强大的音频功能。

Core Data:提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至可处理任何应用或大或小的数据模型。

功能列表:框架分类

下面是 Cocoa Touch 中一小部分可用的框架:

音频和视频:Core Audio ,OpenAL ,Media Library ,AV Foundation

数据管理 :Core Data ,SQLite

图形和动画 :Core Animation ,OpenGL ES ,Quartz 2D

网络:Bonjour ,WebKit ,BSD Sockets

用户应用:Address Book ,Core Location ,Map Kit ,Store Kit

83. 自动释放池是什么,如何工做

答:当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放.它仍然是个正当的对象,所以自动释放池定义的做用域内的其它对象能够向它发送消息。当程序执行到做用域结束的位置时,自动释放池就会被释放,池中的全部对象也就被释放。

84. Objective-C的优缺点。

答:objc优势:

1).  Cateogies

2).  Posing

3). 动态识别

4).指标计算

5).弹性讯息传递

6).不是一个过分复杂的 C 衍生语言

7).Objective-C 与 C++ 可混合编程

objc缺点:

1).不支援命名空间

2).不支持运算符重载

3).不支持多重继承

4).使用动态运行时类型,全部的方法都是函数调用,因此不少编译时优化方法都用不到。(如内联函数等),性能低劣。

85. sprintf,strcpy,memcpy使用上有什么要注意的地方。

答:

1). sprintf是格式化函数。将一段数据经过特定的格式,格式化到一个字符串缓冲区中去。sprintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,形成溢出。

2).strcpy是一个字符串拷贝的函数,它的函数原型为strcpy(char *dst, const char *src

将src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为 ‘\0',因为拷贝的长度不是由咱们本身控制的,因此这个字符串拷贝很容易出错。

3). memcpy是具有字符串拷贝功能的函数,这是一个内存拷贝函数,它的函数原型为memcpy(char *dst, const char* src, unsigned int len);将长度为len的一段内存,从src拷贝到dst中去,这个函数的长度可控。可是会有内存叠加的问题。

86. readwrite,readonly,assign,retain,copy,nonatomic 属性的做用

答:@property是一个属性访问声明,扩号内支持如下几个属性:

1).getter=getterName,setter=setterName,设置setter与 getter的方法名

2).readwrite,readonly,设置可供访问级别

2).assign,setter方法直接赋值,不进行任何retain操做,为了解决原类型与环循引用问题

3).retain,setter方法对参数进行release旧值再retain新值,全部实现都是这个顺序(CC上有相关资料)

4).copy,setter方法进行Copy操做,与retain处理流程同样,先旧值release,再 Copy出新的对象,retainCount为1。这是为了减小对上下文的依赖而引入的机制。

5).nonatomic,非原子性访问,不加同步,多线程并发访问会提升性能。注意,若是不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级。

87. http和scoket通讯的区别。

答: http是客户端用http协议进行请求,发送请求时候须要封装http请求头,并绑定请求的数据,服务器通常有web服务器配合(固然也非绝对)。 http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开链接,以节省资源。服务器不能主动给客户端响应(除非采起http长链接 技术)。iphone主要使用类是NSUrlConnection。

scoket是客户端跟服务器直接使用socket“套接字”进行链接,并无规定链接后断开,因此客户端和服务器能够保持链接通道,双方 均可以主动发送数据。通常在游戏开发或股票开发这种要求即时性很强而且保持发送数据量比较大的场合使用。主要使用类是CFSocketRef。

88. TCP和UDP的区别

答: TCP全称是Transmission Control Protocol,中文名为传输控制协议,它能够提供可靠的、面向链接的网络数据传递服务。传输控制协议主要包含下列任务和功能:

* 确保IP数据报的成功传递。

* 对程序发送的大块数据进行分段和重组。

* 确保正确排序及按顺序传递分段的数据。

* 经过计算校验和,进行传输数据的完整性检查。

TCP提供的是面向链接的、可靠的数据流传输,而UDP提供的是非面向链接的、不可靠的数据流传输。

简单的说,TCP注重数据安全,而UDP数据传输快点,但安全性通常

89. 你了解svn,cvs等版本控制工具么?

答: 版本控制 svn,cvs 是两种版控制的器,须要配套相关的svn,cvs服务器。

scm是xcode里配置版本控制的地方。版本控制的原理就是a和b同时开发一个项目,a写完当天的代码以后把代码提交给服务器,b要作的时候先从服务器获得最新版本,就能够接着作。 若是a和b都要提交给服务器,而且同时修改了同一个方法,就会产生代码冲突,若是a先提交,那么b提交时,服务器能够提示冲突的代码,b能够清晰的看到,并作出相应的修改或融合后再提交到服务器。

90. 什么是push。

答: 客户端程序留下后门端口,客户端老是监听针对这个后门的请求,因而 服务器能够主动像这个端口推送消息。

91. 静态连接库

答:此为.a文件,至关于java里的jar包,把一些类编译到一个包中,在不一样的工程中若是导入此文件就可使用里面的类,具体使用依然是#import “ xx.h”。

92. fmmpeg框架

答: 音视频编解码框架,内部使用UDP协议针对流媒体开发,内部开辟了六个端口来接受流媒体数据,完成快速接受之目的。

93. fmdb框架

答:数据库框架,对sqllite的数据操做进行了封装,使用着可把精力都放在sql语句上面。

94. 320框架

答: ui框架,导入320工程做为框架包如同添加一个普通框架同样。cover(open)  flower框架 (2d 仿射技术),内部核心类是CATransform3D.

94. 什么是沙盒模型?哪些操做是属于私有api范畴?

答:某个iphone工程进行文件操做有此工程对应的指定的位置,不能逾越。

iphone沙箱模型的有四个文件夹documents,tmp,app,Library,永久数据存储通常放documents文件夹,获得模拟器的路径的可以使用NSHomeDirectory()方法。Nsuserdefaults保存的文件在tmp文件夹里。

95. 在一个对象的方法里面:self.name= “object”;和 name =”object” 有什么不一样吗?

答:self.name =”object”:会调用对象的setName()方法;

name = “object”:会直接把object赋值给当前对象的name属性。

96. 请简要说明viewDidLoad和viewDidUnload什么时候调用

答:viewDidLoad在view从nib文件初始化时调用,loadView在controller的view为nil时调用。此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用,在这里实现将retain的view release,若是是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。

97. 简述内存分区状况

答:

1).代码区:存放函数二进制代码

2).数据区:系统运行时申请内存并初始化,系统退出时由系统释放。存放全局变量、静态变量、常量

3).堆区:经过malloc等函数或new等操做符动态申请获得,需程序员手动申请和释放

4).栈区:函数模块内申请,函数结束时由系统自动释放。存放局部变量、函数参数

98. 队列和栈有什么区别:

答:队列和栈是两种不一样的数据容器。从”数据结构”的角度看,它们都是线性结构,即数据元素之间的关系相同。

队列是一种先进先出的数据结构,它在两端进行操做,一端进行入队列操做,一端进行出列队操做。

栈是一种先进后出的数据结构,它只能在栈顶进行操做,入栈和出栈都在栈顶操做。

99. HTTP协议中,POST和GET的区别是什么?

答:

1).GET 方法

GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见;

GET 方法提交的数据大小有限

GET 方法不能够设置书签

2).POST 方法

POST 方法提交数据安全,数据置于消息主体内,客户端不可见

POST 方法提交的数据大小没有限制

POST 方法能够设置书签

100.  iOS的系统架构

答: iOS的系统架构分为( 核心操做系统层 theCore OS layer )、( 核心服务层theCore Services layer )、( 媒体层 theMedia layer )和( Cocoa 界面服务层 the Cocoa Touch layer )四个层次。

101.  控件主要响应3种事件

答:1). 基于触摸的事件 ;  2). 基于值的事件 ;  3).基于编辑的事件。

102.  xib文件的构成分为哪3个图标?都具备什么功能。

答: File’s Owner 是全部 nib 文件中的每一个图标,它表示从磁盘加载 nib 文件的对象;

First Responder 就是用户当前正在与之交互的对象;

View 显示用户界面;完成用户交互;是 UIView 类或其子类。

103.  简述视图控件器的生命周期。

答: loadView 尽管不直接调用该方法,如多手动建立本身的视图,那么应该覆盖这个方法并将它们赋值给试图控制器的 view 属性。

viewDidLoad 只有在视图控制器将其视图载入到内存以后才调用该方法,这是执行任何其余初始化操做的入口。

viewDidUnload 当试图控制器从内存释放本身的方法的时候调用,用于清楚那些可能已经在试图控制器中建立的对象。

viewVillAppear 当试图将要添加到窗口中而且还不可见的时候或者上层视图移出图层后本视图变成顶级视图时调用该方法,用于执行诸如改变视图方向等的操做。实现该方法时确保调用 [super viewWillAppear:

viewDidAppear 当视图添加到窗口中之后或者上层视图移出图层后本视图变成顶级视图时调用,用于放置那些须要在视图显示后执行的代码。确保调用 [super viewDidAppear:] 。

104.  动画有基本类型有哪几种;表视图有哪几种基本样式。

答:动画有两种基本类型:隐式动画和显式动画。

105.  实现简单的表格显示须要设置UITableView的什么属性、实现什么协议?

答:实现简单的表格显示须要设置 UITableView 的 dataSource 和 delegate 属性,实现UITableViewDataSource 和 UITableViewDelegate 协议。

106.  Cocoa Touch提供了哪几种Core Animation过渡类型?

答: Cocoa Touch 提供了 4 种 Core Animation 过渡类型,分别为:交叉淡化、推挤、显示和覆盖。

107.  UIView与CLayer有什么区别?

答:

1).UIView 是 iOS 系统中界面元素的基础,全部的界面元素都是继承自它。它自己彻底是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理。 UIView 自己更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性。

2).UIView 有个重要属性 layer ,能够返回它的主 CALayer 实例。

3).UIView 的 CALayer 相似 UIView 的子 View 树形结构,也能够向它的 layer 上添加子layer ,来完成某些特殊的表示。即 CALayer 层是能够嵌套的。

4).UIView 的 layer 树形在系统内部,被维护着三份 copy 。分别是逻辑树,这里是代码能够操纵的;动画树,是一个中间层,系统就在这一层上更改属性,进行各类渲染操做;显示树,其内容就是当前正被显示在屏幕上得内容。

5).动画的运做:对 UIView 的 subLayer (非主 Layer )属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值彷佛是 0.5 秒。

6).坐标系统: CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性,使用CGPoint 结构表示,值域是 0~1 ,是个比例值。这个点是各类图形变换的坐标原点,同时会更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。

7).渲染:当更新层,改变不能当即显示在屏幕上。当全部的层都准备好时,能够调用setNeedsDisplay 方法来重绘显示。

8).变换:要在一个层中添加一个 3D 或仿射变换,能够分别设置层的 transform 或affineTransform 属性。

9).变形: Quartz Core 的渲染能力,使二维图像能够被自由操纵,就好像是三维的。图像能够在一个三维坐标系中以任意角度被旋转,缩放和倾斜。 CATransform3D 的一套方法提供了一些魔术般的变换效果。

108. Quatrz 2D的绘图功能的三个核心概念是什么并简述其做用。

答:上下文:主要用于描述图形写入哪里;

路径:是在图层上绘制的内容;

状态:用于保存配置变换的值、填充和轮廓, alpha 值等。

109.  iPhone OS主要提供了几种播放音频的方法?

答: SystemSound Services

AVAudioPlayer 类

Audio Queue Services

OpenAL

110.  使用AVAudioPlayer类调用哪一个框架、使用步骤?

答: AVFoundation.framework

步骤:配置 AVAudioPlayer 对象;

实现 AVAudioPlayer 类的委托方法;

控制 AVAudioPlayer 类的对象;

监控音量水平;

回放进度和拖拽播放。

111.  有哪几种手势通知方法、写清楚方法名?

答:

-(void)touchesBegan:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesMoved:(NSSet*)touched withEvent:(UIEvent*)event;

-(void)touchesEnded:(NSSet*)touchedwithEvent:(UIEvent*)event;

-(void)touchesCanceled:(NSSet*)touchedwithEvent:(UIEvent*)event;

112.  CFSocket使用有哪几个步骤。

答:建立 Socket 的上下文;建立 Socket ;配置要访问的服务器信息;封装服务器信息;链接服务器;

113.  Core Foundation中提供了哪几种操做Socket的方法?

答: CFNetwork 、 CFSocket 和 BSD Socket 。

114.  解析XML文件有哪几种方式?

答:以 DOM 方式解析 XML 文件;以 SAX 方式解析 XML 文件;

115. ios 平台怎么作数据的持久化?coredata 和sqlite有无必然联系?coredata是一个关系型数据库吗?

答:iOS 中能够有四种持久化数据的方式:属性列表(plist)、对象归档、 SQLite3 和 Core Data; core data 可使你以图形界面的方式快速的定义 app 的数据模型,同时在你的代码中容易获取到它。 coredata 提供了基础结构去处理经常使用的功能,例如保存,恢复,撤销和重作,容许你在 app 中继续建立新的任务。在使用 core data 的时候,你不用安装额外的数据库系统,由于 core data 使用内置的 sqlite 数据库。 core data 将你 app 的模型层放入到一组定义在内存中的数据对象。 coredata 会追踪这些对象的改变,同时能够根据须要作相反的改变,例如用户执行撤销命令。当 core data 在对你 app 数据的改变进行保存的时候, core data 会把这些数据归档,并永久性保存。 mac os x 中sqlite 库,它是一个轻量级功能强大的关系数据引擎,也很容易嵌入到应用程序。能够在多个平台使用, sqlite 是一个轻量级的嵌入式 sql 数据库编程。与 core data 框架不一样的是, sqlite 是使用程序式的, sql 的主要的 API 来直接操做数据表。 Core Data 不是一个关系型数据库,也不是关系型数据库管理系统 (RDBMS) 。虽然 Core Dta 支持SQLite 做为一种存储类型,但它不能使用任意的 SQLite 数据库。 Core Data 在使用的过程种本身建立这个数据库。 Core Data 支持对1、对多的关系。

116.  tableView 的重用机制?

答:UITableView 经过重用单元格来达到节省内存的目的: 经过为每一个单元格指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,以及当单元格滚出屏幕时,容许恢复单元格以便重用.对于不一样种类的单元格使用不一样的ID,对于简单的表格,一个标识符就够了.