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.framework:流媒体
CFNetwork.framework:网络通信(套接字)
Coretelephoy.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和bounds都是UIView的两个属性(property)
frame指的是,该view在父view坐标系中的位置和大小(参照物是父坐标系)
bounds指的是,该view在本身坐标系中的位置和大小(参照物是本身坐标系)
9、(http)get请求和post请求的区别:
1、post请求 请求地址和参数分离,比get更加安全 get请求的参数 直接暴漏在外面 不安全
2、get请求一般获取服务器的数据(下载数据/提交参数) 不能上传文件,而post两者都可以
3、get请求在浏览器中字符串长度最大限制为1024,post 没有限制
4、post 上传文件 文件大小不能超过4G
5、get请求 NSURLConnetion 请求下来的数据,NSURLConnection 会做一定的数据缓存,post请求,请求下来的数据NSURLConnection不做数据缓存
描述AFNetwork作用 和用法
常见问题
1、AFNetworking作用有哪些
(1):AFNetworking 可以将远程媒体数据类型(NSdata)转化为可用的格式,比如:json,xml,图像和plist。
(2):AFURLConnectionOperation可以让你完成上传和下载,处理验证,监控上传和下载进度
(3):AFURLConnectionOperation和它的子类继承NSOperation,允许请求被取消,暂停/恢复和由NSOperationQueue进行管理
(4):AFHttpClient提供了一个方便的网络交换接口,包括身份验证,是否连接到网络,批量处理操作,查询字符串参数序列化,以及多种表单的请求。
(5):UIImageView+AFNetworking增加了一个方便方法,来异步加载图片
2、AFNetworking是否支持缓存?
可以,NSURLCache以及其子类提供了很多高级接口,用于处理缓存,如果您想将缓存存储于磁盘,推荐使用SDURLCache
3、如何使用AFNetworking上传一个文件
NSData *imageData = UIImagePNGRepresentation(image);
NSURLRequest *request = [client multipartFromRequestWithMethod:”POST” path:@“/upload” parameters:nil ConsTructingBodyWithBlock^(id formData){[formData appendPartWithFileData:imageData mineType:@“image/png” name:@“avatar”]}];
4、如何使用AFNetworking下载一个文件
首先创建一个AFURLConnectionOperation对象,然后再使它的属性outputStream进行处理
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:@“download.zip” append:NO];
5、当应用程序退出时,如何保持持续的请求?
AFURLConnectionOperation 有一个叫setShouldExecuteAsBackgroundTaskWithExpirationHandler的方法,用于处理应用程序进入后台,进行持续请求
[self setShouldExecuteAsBackgroundTaskWithExpirationHandler^{}];
1、简述storyboard和xib的区别?
一个工程中,可以有多个xib文件,一个xib文件对应着一个视图类控制器,和多个视图,然而,使用storyboard时,一个工程,只需要一个主storyboard文件就可以,因此在包含多个视图控制器的情况下,采用storyboard管理比较方便,并且,storyboard还可以描述界面之间的导航关系。
2、请列举iOS系统中的单例类?
UIApplication(应用程序实例)
NSUserDefault(应用程序设置)
NSFileManager(文件管理)
NSURLCache(请求缓存)
NSNotificationCenter(消息中心)
NSHTTPCookieStorage(应用程序cookies池)
3、请简述你对同步/异步请求数据的理解?
1、同步请求可以从网络请求数据,一旦发送同步请求,程序将停止与用户交互,直到服务器返回数据完成,才可以进行下一步操作。
2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行。