ios面试题及答案
iOS面试试题及参考答案
2、 线程和进程的区别和联系?
进程和线程都是由操作系统所体会的程序运行的基本单元,系统会利用该基本单元实现系统对应用的并发性。线程和进程的主要差别在于它们是不同的操作系统资源管理方式,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所有多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
3、 属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?
1) Readwrite是可读可写特性,需要生成getter方法和setter方法时
2) Readonly是只读写特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变
3) Assign是赋值特性,setter方法将传入参数赋值给实例变量,仅设置变量时
4) Retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1
5) Copy表示赋值特性,setter方法将传入对象赋值一份,需要完全一份新的变量时
6) Nonatomic非原子操作,决定编译器生成的setter,getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic
4、 object-c中创建线程的方法是什么,如果在主线程中执行代码,方法是什么,如果想延时执行代码,方法又是什么?
线程创建有三种方法:使用nsthread创建、使用gcd的dispatch创建、使用子类化的nsoperation创建,然后将其加入nsoperationqueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone
5、 类别的作用,继承和类别在实现中有何区别?
Category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改;并且如果类别和原来类中的方法产生冲突,类别将覆盖原来的方法,因此类别具有更高的优先级;将类的实现分散到多个不同文件或多个不同框架中,创建对私有方法的前向引用,向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性
6、 什么是KVC、KVO?
Kvc:键值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制
Kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码
7、 在iphone应用中如何保存数据?
1) 通过web服务,保存在服务器上
2) 通过nscoder固化机制,将对象保存在文件中
3) 通过sqlite或者coredata保存在文件数据库中
8、 在项目中什么时候选择使用gcd,什么时候选择nsoperation?
项目中使用nsoperation的优点是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化nsoperation的设计思路,是具有面向对象的优点,使得实现是多线程支持,而接口简单,建议在复杂的项目中使用;而gcd的优点是它本身简单,易用,对于不复杂的多线程操作,会节省代码量,而block参数的使用,会使代码更为易懂,建议在简单项目中使用
9、 iOS性能优化(初级)
1) 用ARC管理内存
2) 在正确的地方使用reuseidentifier
3) 尽可能使view透明
4) 避免庞大的xib
5) 不要block主线程
6) 在imageviews中调整图片大小
7) 选择正确的collection
8) 打开zip压缩
10、 简单描述下客户端的缓存机制?
1) 缓存可以分为:内存数据缓存、数据库缓存、文件缓存
2) 每次想要获取数据的时侯
1> 先检查内存中有无缓存
2> 在检查本地有无缓存
3> 最终发送网络请求
4> 讲服务器返回的网络数据进行缓存(内存、数据库、文件),以便下次读取
11、 iOS控制器view的生命周期
1> init函数——初始化
2> awakefromnib——在loadview之前的工作放在这里
3> viewdidload——一个viewcontroller一个生命周期内这个函数只会调用一次
4> viewwillappear——view将要出现,每次view消失再出现都会调用
5> viewwilllayoutsubviews——简要对子视图进行布局 6> Viewdidlayoutsubviews——完成对子视图进行布局 7> viewdidappear——视图将要出现在屏幕上
8> viewwilldisappear——view将要消失
9> viewdiddisappear——view已经消失
看了“ios面试题及答案”的还看了:
1.软件测试常见面试题及答案
2.管理人员面试题及答案
3.关于事业单位常见的面试题及答案
4.面试问题及答案
5.ios面试技巧