1.除了MVC模式 你还熟悉什么设计模式
代理模式:当一个类的某些功能需要由别的类实现,但是又不确定具体是哪个类实现的
单例模式:确保程序运行期,某个类只有一份实例,用于进行资源共享
工厂模式:工厂模式创建的实例,多与proxy模式配合,创建可替代的类,一般用于基础控件的创建
观察者模式:一般为model层,对controller和view进行通知,不关心谁接收,只负责发布消息
策略模式:定义算法,封装起来,使他们之间可相互替换
2.线程和进程的区别与联系?谈谈多线程。
(1)一个线程只属于有一个进程,而一个进程可以有多个线程,至少有一个线程
(2)资源分配给进程,统一进程的所有线程共享该进程的所有资源
(3)处理机分给线程,即真正在处理机上运行的是线程
3.你在开发项目中,用到了那些数据存储方式,ios中常见的方式有哪几种?
(1)归档 :采用归档的形式来保存数据,该数据对象需要 遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。例如对Possession对象归档保存。
(2)NSUserDefault:用来保存应用程序设置和属性、用户保存的数 据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、 NSNumber、NSDate、NSArray、NSDictionary。如果要存储其他类型,则需要转换为前面的类型,才能用NSUserDefaults存储。
(3)write写入,永久保存在磁盘中:具体方法为:第一步:获得文件即将保存的路径:NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);//使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录 的全路径。该函数有三个参数,目录类型、he domain mask、布尔值。其中布尔值表示是否需要通过~扩展路径。而且第一个参数是不变的,即为NSSearchPathDirectory 。在IOS中后两个参数也是不变的,即为:NSUserDomainMask 和 YES。NSString *ourDocumentPath =[documentPaths objectAtIndex:0];
(4)sqlite数据库:第一步:需要添加SQLite相关的库以及头文件:在项目文件的Build Phases下,找到Link Binary Library(ies),添加libsqlite3.0.dylib;在项目文件中头文件或者源文件中添加头文件#import “/usr/include/sqlite3.h”第二步:开始使用SQLite:使用前注意:如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。
4.arc的程序出现内存泄露怎么办
用ARC的,只是编译器帮你管理合适release、retain,不用ARC就需要你自己去管理,说到底就是谁去管理的问题,如果实在找不到问题,建议你找到内存泄露的那个对象,将其赋值为nil,因为在ARC中,一旦对象没有指针指向,就会马上释放
5.❤️简述一下iOS应用开发流程
(1)产品经理做需求调研,确定产品需求,编写需求文档
(2)产品人员完成产品原型
(3)产品经理召开会议(产品,uI,开发,测试,服务器)
(4)服务器与客户端成员一起制定接口文档
(5)项目经理制定开发进度,分配任务,预算开发周期
(6)移动客户端开发人员根据UI界面和需求文档,开始编码,开发模块上的功能
(7)开发者完成开发后提交给测试
(8)测试部分完毕,提交给产品经理,验收产品
(9)提交到appstore