iOS程序员面试题(一)

1.  App上线流程

 1.appID       2.发布证书    3.在官网填写app的信息        4.压缩打包       5.在官网添加打包好的工程       6.提交审核 等待结果

2.KVO KVC的区别?在实际工作中在哪用到了 KVC KVO?

KVC 键值编码 通过把属性名 当成key 来改变属性的值

KVO 键值观察者 通过KVC的方式 把属性当做key 来观察属性值的变化  做出响应

数据转模型 用到了KVC

封装下拉改变导航栏透明度的时候  使用的是KVO

3.单例

通过方法让对象只创建一次,可以避免重复创建 ,节省内存开支。

4.浅复制和深复制的区别?

浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身。//通过对象的指针来访问这个对象----只赋值地址,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的 只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一 个思想。

深层复制(mutableCopy):复制引用对象本身---再创建一个对象 意思就是有个A对象,复制一份后得到A_copy对象后,深复制就好理解了,内存中存在了,两份独立对象本身。

5.数据持久化存储方式有哪些?以及特点?

1.plist 属性列表 最外层只能存储数组字典 里面只能存储 bool NSNumber String Data Date

2.NSUserDefault 最终也是保存成plist 系统封装了保存的路径 保存的方法

3.归档 可以对保存数据的文件 进行加密

4.sqlite  关系型数据库 以表的形式存储  FMDB是对 OC中 sqlite操作封装 的第三方库

5.coreData 是苹果封装的 对文件操作的框架 可以 以对象的形式存储 底层数据文件可以是sqlite类型 也可以是XML JSON …

6.谈谈你对MVC的理解?  为什么要用MVC?

MVC就是Model-View-Controller的缩写,M指的是业务模型,V指的是用户页面,C指的是控制器。MVC是架构模式,是讲M和 V的代码分离,从而使同那个一个程序可以使用不同的表现形式。

7. 面向对象的三个基本特征是?

 封装、继承、多态

8.线程与进程的区别和联系?

线程是进程的基本单位进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下get post 不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的 地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较 大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

9.多线程有几种方式? 

NSTherd, NSOperation, GCD

10.检查内存管理问题的方式有哪些?

1)点击Xcode顶部菜单中的Product Analyze。这种方法主要可以查看内存泄露,变量未初始化,变量定义后没有被使用到

2)使用Instrument工具检查。点击Xcode顶部菜单中的Product Profile,弹出一个界面,选择左侧的Memory后,再选右侧的Leaks。

3)人工检查

11.分类,延展,继承?

分类:一般用于扩展一个类的方法,它可以不用创建一个新的类,但是不能够扩充成员变量,使用分类重写本类的方法后无法再调用原来的方法,使用分类还能够将一个类的定义写在不同的文件内,可以拆分业务逻辑,使一个分类的功能更专一。

延展(extension):延展相当于匿名的分类,一般写在实现文件里面(.m文件),它可以扩充私有变量和方法,但是变量和方法只能在本文件内有效(私有的),其他文件不可以调用。(并且一般不会有人通过延展扩充方法)。

继承 :使用继承扩充一个类,需要再创建一个子类,能够扩充成员变量和方法,可以重写父类的方法,而且可以通过super调用父类的方法,但是由于继承于父类。

12.项目:自适应Cell(流程)

需要自适应cell时,首先要自定义Cell视图,自定义时最好使用分层的设计,这样的设计方式可以增加代码的复用性,看起来也比较清晰,更改需求时,代码的变动也比较小然后肯定要有数据模型model,然后还要根据分层创建对应的frameModel,每一个frameModel对应一个Cell的层,使用时通过frameModel给对应的控件frame赋值,在frameModel内部则是,通过最底层的frameModel中的model数据传递给上层的frameModle模型,直到最后的分层,然后通过数据计算相应控件的大小,然后最上层的frameModel将自己的frame传递给下层,这样一级一级传递,到达最底层的frameModel时就可以计算出所对应的cellHeight。

13.程序构架(流程)

写框架前 要仔细分析各个模块及控制器之间的跳转和依赖的关系,比如分析一下看看这几个控制之间有没有什么样的view是可以重用的,如果有的话,就不要在第一次使用的这个View是将其和控制器绑定在一块,可以自定义一个view,以备以后重用时简便,考虑以后需求修改的可能性,我感觉最好逻辑比较复杂又有tableview或者collectionView时都是用UIViewController作为底层控制器比较好,只是在上面添加你想用的到View即可。

14.自定义控件(流程)

自定义控件经常是使用,一般情况下,自定义一个控件首先你要知道这个控件是干嘛用得,它需不需要显示图片,文字,需不需要点击,需不需要变动frame等,然后根据响应的需求留下对应的接口,比如点击一个自定义控件,那这个控件需要通知控制它被点击了,简单情况下如果只有一个button,只需要通知一个控制器,就可以通过外部定义一个。

15.收藏、最近?

收藏和最近主要就是使用工具类对数据进行增加和删除,保存数据时要重写数据的equalto方法(因为计算机是根据内存地址比较的,而有时候内存地址虽然不同,但是储存的数据确实一样的,所以一般根据数据的位置标识(例如id值)比较)

如果是做最近,就需要将上一次的数据删除,添加新的数据进来,如果在搜藏是需要记录控件的编辑和选中状态,就需要在数据模型中添加相应的属性,利用数据来控制控件的状态

常出现的问题就是使用tableview时会出现循环利用的问题,这个问题就可以使用数据的值来避免,每次加载cell时,他的状态是受数据控制的,数据不会发生循环利用的问题,这个问题也就不会出现了。

16.推送流程?

一般意义上说推送就是指远程推送,本地推送一般可以用来提示长时间未进入应用的用户,也可以用来做闹铃。

(一个程序可以推送,首先你要向苹果公司注册推送证书)

下面详细说一下远程推送的流程:

1.当你的程序需要推送时,通过UIApplication中的registerUserNotification注册远程推送,注册后,你的程序会通过iOS系统向APNs服务器请求,APNs服务器接到请求后会将请求设备的device token(设备令牌)发送回你的应用,在UIApplication的代理方法中可以接收到device token,如果请求失败也会通过代理方法返回错误信息。

2.当应用程序拿到device token后,就可以将device token回传给应用提供商服务器,服务器就知道了这台设备可以推送消息了,然后将device token储存在服务器内部,device token的生成算法只有苹果公司才知道,所以为了防止苹果修改算法造成推送失败,最好每次启动程序时都请求一次device token,在device token发生改变时,告诉服务器新的device token。

(推送一般情况下是程序提供商向用户推送一些最新的消息或者资讯,不过比如QQ,微信等可以在离线的情况下进行消息的提醒,下面以qq推送离线消息为例,相比从服务器推送,qq离线消息的推送是由客户端编辑信息的)。

3.现在如果程序要推送消息了,就可以将消息和要发送的对象的账号发送给程序提供商服务器,服务器会通过你要推送的对象的账号信息找到对应绑定的device token,然后将推送消息内容和device token传给APNs服务器。

4.APNs服务器在接收到消息内容和device token后会查找已注册的设备然后将对应的信息和device token推送到指定的设备上,设备通过device token中的app id找到要推送的app,然后信息会按照app的推送设置显示信息。

推送流程:

deviceToken:包括appID和UDID。手机在联网状态下,与苹果有个长连接,可以生成一个deviceToken,在appdelegate的didReceiveXXX方法里和可以获取deviceToken。

17.二维码?

做二维码的话,可以使用的第三发库有ZBar和ZXing具体使用方法可以去网上查看文档

但是现在iOS中的AVFoundation框架中也集成了二维码扫描,用起来也十分方便,并且扫描速度也更快,还可以使用AVFoundation框架生成二维码。

18.支付功能:支付宝,微信,银联?

支付宝

1.导入AlipaySDK.bundle   AlipaySDK.framework 系统库SystemConfiguration.framework

2.导入头文件 #import

3.info.plist注册scheme

4.配置请求Order信息

《1》将商品信息拼接成字符串

《2》获取私钥并签名商户信息

《3》生成订单

5.设置回调方法

微信

1.开放平台申请帐号 并开通支付功能

2.导入SDK 添加依赖库

3.后台生成订单 开始支付

4.用户确认信息输入密码

5.支付完成 跳回app

银联

UPPayPlugin无卡交易

UPPayPluginPro无卡交易和VIPOS音频口支付

需要把.m改成.mm

1.添加SDK包 添加系统库

2.服务器准备交易流水号

3.startPay 开始支付

4.设置回调方法  

@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,056评论 25 707
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,107评论 29 470
  • OC的理解与特性 OC作为一门面向对象的语言,自然具有面向对象的语言特性:封装、继承、多态。它既具有静态语言的特性...
    克鲁德李阅读 443评论 0 0
  • 1.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作...
    曾令伟阅读 1,040评论 0 10
  • 爱情有多美好,失恋就有多痛苦。就像毒品,明知伤己,却戒不掉。 失恋初始,每个人表现不尽相同。有的优雅转身,好聚好散...
    发现生活之美阅读 1,908评论 2 6