您的位置:首页 > 职场人生

21道工作中总结的iOS高频面试题

2015-08-27 21:14 639 查看
1、除了MVC模式,还熟悉哪些模式?
代理模式:当一个类的某些功能需要有别的类实现,但又不确定具体那个类实现的,
单例模式:确保程序运行期,某个类只有一份实例,用于进行资源共享
工厂模式:工厂模式创建的实例,多余proxy模式配合,创建可替代的类
观察者模式:一般为model层,对controller和view进行通知,不关心谁接收,只负责发布消息
策略模式:定义算法,封装起来,使他们之间可以相互替换;

2、线程与进程的区别和联系?谈谈多线程
  (1)一个流程只能属于一个进程,而一个进程可以有多个线程,至少有一个线程
  (2)资源分配给进程,统一进程的所有线程共享该进程的所有资源
  (3)处理机分给线程,及真正在处理机上运行的是线程;

3、你在开发项目中,用到了哪些数据存储方式,ios中常见的方式有哪些?
  1.归档
  2.NSUserDefault
  3.write写入,永久保存在磁盘中
  4.sqlite数据库

4、arc程序出现内存泄露怎么办?
用ARC的,只是编译器帮你管理啦何时去release,retain,不用ARC就需要你自己去管理,说到底就是谁去管理的问题,如果实在找不到问题,可以找到泄露的那个对象,将其赋值为nil,因为在ARC中,一旦对象没有指针指向,就会马上被释放;

5、简述一下ios应用开发流程

1.产品经理做需求文档,确定产品需求,编写需求文档
2.产品人员完成产品原型
3.产品经理召开会议(产品,UI,开发,测试,服务器)
4.服务器与客户端成员一起制定接口文档
5.项目经理指定开发进度,分配任务,预算开发周期
6.移动客户端开发人员根据UI界面和需求文档,开始编码,开发模块上的功能
7.开发者提交给测试
8.测试部分完毕,提交给产品经理,验收产品
9.提交到appstore

6、请简述下面例举的framework的作用

CoreData.framework:数据库
CoreLocation.framework:定位
MapKit.framework:地图
CoreAnimation.framework:动画
AddressBook.framework:通讯录
AVFoundation.frame:流媒体
CFNetwork.framework:网络通信(套接字)
Coretelephony.framework:(核心通讯框)打电话
CoreText.framework:图文混排
GameKit,framework:实现蓝牙的相互通信,既是服务端,又是客户端
HealthKit.framework:分离数据收集,数据处理和社会化(苹果主推健康数据处理)
Security.framework:网络安全框架(加密,密钥)
Social.framework:社会化分享(新浪,微信,qq)
OpenAL.framework:播放音频流
MessageUI.framework:发短信,发邮件
NewsstandKit.framework:后台下载,推送

7、简述kvc、kvo他们之间的联系
Kvc是一种通过字符串去间接操作对象属性的一种机制
假如,我们去访问一个对象的属性 person.age 也可以用kvc的方式[person valueForKey@“age”];

Kvo就是在一个语言框架层面实现的观察者模式,通过KVC的方式去修改属性,会主动通知观察者

8. iOS中 frame和bounds的区别
frame和bouds都是UIView的两个属型(property)
frame 指的是,该view在父View坐标系中的位置和大小(参照点的父坐标系)
bonds指的是,该View在本身坐标系中的位置和大小(参照物是本身坐标系)

9、请简述storyboard和xib的区别
一个工程可以有多个xib文件,一个xib文件对应着一个视图控制器和多个视图,然而使用storyboard时,一个工程,只需要一个storyboard文件就可以,因此在包含多个试图控制器的情况下,采用storyboard管理比较方便,并且,storyboard还可以描述界面之间的导航关系

10、请举例iOS系统中的单例类

UIApplication(应用程序实例)
NSUserDefaluts(应用程序设置)
NSFileManager (文件管理)
NSURlCache (请求缓存)
NSNotificationCenter(消息中心)
NSHTTPCookieStorage(应用程序cookie池)

11、请简述你对同步/异步请求数据的理解

同步请求可以从网络请求数据,一旦发送同步请求,程序将停止与用户交互,直到服务器返回数据完成,才可以进行下一步操作
异步下载请求不会阻塞主线程 ,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行

12、IOS7相关问题(问的最多)不会问的太深
      谈谈你对ios7的了解(新特性)

      UI界面的改动方面

1、拟物化设计 skeuomorphism

     代表作品:iOS7.0以下,Android、以及iOS7.0以下时代的大部分app
     特点:
         a 界面:模拟真实物体的材质、质感、细节、光亮等
         b 交互:人机交互也拟物化,模拟现实中的交互方式。
    好处:学习成本低,一学就会。而且传达了丰富的人性化的感情。所以家居类物品适合拟物化设计。
    坏处:拟物化本身就是个约束,会限制功能本身的设计。

2、扁平化设计 Flat
       代表作:iOS7.0及以上,微软的Metro UI,Phone8,Windows8
       特点:
         a 界面:简单纯色的简单组合(iOS系)、单色极简的抽象矩形色块(微软系)、大字体、光滑、现代感十足,有种蒙德里安的感觉
         b 交互:因为扁平化设计的核心是对功能本身的使用(对内容本身的消费),所以去掉了冗余的界面和交互,而是使用更直接的设计来完成任务。
    好处:界面和交互简约,信息更直观,信息量更大。如果要设计精密的宇宙飞船,那么驾驶盘肯定会使用扁平化的设计。
    坏处:需要一定的学习成本,且传达的感情不丰富,甚至过于冰冷。

       动态UIKit方面
用来为UIView制定动态行为
所谓动态行为,是指将现实世界的行为或者特性引入到UI中,比如重力等

       游戏方面
iOS7 SDK极大加强了直接使用iOS SDK制作和分发游戏的体验,最主要的是引入了专门的游戏制作框架
       SDK方面
软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。

可以在新版本Xcode中添加老版本的sdk:
首先得有老版本的sdk,

13、数据库方面的问题
    (1)CoreData和SQLite的比较
 iOS中提供了对原始SQLite数据库API访问的封装,通过这个framework来管理数据缓存和持久数据要比使用SQL语句操作SQLite数据库简单和方便许多
    (2)CoreData的详细使用

      Core Data 特点:
    

     1)Core Data的强大之处就在于这种关系可以在一个对象更新时,其关联的对象也会随着更新,相当于你更新一张表的时候,其关联的其他表也会随着更新。

     2)Core Data的另外一个特点就是提供了更简单的性能管理机制,例如,使用NSFetchedResultsController类,你不用使用SQL的Limit而是使用NSFetchRequest类的setFetchBatchSize()就可以限制查询记录的总数,而NSFetchedResultsController类神奇的地方在于需要获取更多记录的时候,这个类会自动更新其缓存。
     3)  对于多表查询上相对来说,CoreData 没有 SQL 直观,但 CoreData 的功能还是可以完成相关操作的。

(3)怎样做数据库的优化
(4)数据库中怎样优化句柄
(5)在两个表中插入数据失败是怎样做数据回滚
(6)使用SQlite发现的问题

14、Controllers之间的传值方式有哪几种?
1.属性传值,
2.block传值
3.代理传值
4.单例传值
5.通知传值,谁要监听值的变化,谁就注册通知

15、如何理解IOS中的沙盒机制
IOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建文件夹内读取文件,不可以访问其他地方的内容,所有非代码文件都保存在这个地方,比如:图片,声音,文本,属性列表
  (1)每个应用程序都在自己的沙盒内
  (2)不能随意跨越自己的沙盒去访问别的应用程序的沙盒内容
  (3)应用程序向外请求或接收数据都需要经过权限认证

16、MVC的理解
model(模型对象):
view(视图对象)
Comtroller(控制器对象)

模型对象 负责应用程序的数据和定义操作数据的逻辑,视图对象指导如何显示应用程序的模型数据,控制器对象是M与V之间的协调者

思考:两个数据源


描述AFNetwork作用和用法
常见问题:

17、AFNetworking作用都有哪些?
 (1):AFNetworking可以将远程媒体数据类型(NSdata)转化为可用的格式,比如:json,xml,图像和plist。
 (2):AFURLConnectionOperation可以让你完成上传,和下载,处理验证,监控上传和下载进度
 (3):AFURLConnectionOperation和它的子类继承NSOperation,允许请求被取消,暂停/恢复和由NSOperationQueue进行管理
 (4):AFHttpClient提供了一个方便的网络交换接口,包括身份验证,是否连接到网络,批量处理操作,查询字符串参数序列化,以及多种表单的请求。
 (5):UIImageView+AFNetworking增加了一个方便方法,来异步加载图像

18、 AFNetworking是否支持缓存?
可以,NSURlCache以及其子类提供了很多高级接口,用于处理缓存,如果你想将缓存存储在磁盘,推荐使用SDURLCache

19、如何使用AFNetworking上传一个文件?
NSdata * imageDta=UIImagePNGRepresentation(image);
NSURLRequest * request=[client multipartFromRequestWithMethod:@“POST”path:@“/upload”parameters:nil ConsTructingBodyWithBlock^(id  formData){[formData appendPartWIthFileData:imageData mine Type:@“image/png”name@“avatar”];
 }];
20、如何使用AFNetworking下载一个文件?
首先创建一个AFURLConnectionOperation对象,然后在对它的属性outputStream进行处理
operation.outputStream=[NSOutputStream outputStreamToFielAtPath:@“download.zip”append:NO];

21、当应用程序退出时,如何保持持续的请求?
AFURLConnectionOperation有一个叫setShouldExecuteAsBackgroundTaskWIthExpirationHandler:的方法,用于处理应用程序进入后台,进行持续请求
[self  setShouldExecuteAsBackgroundTaskWIthExpirationHandler: ^{

} ];

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: