IOS面试题收集

来源:互联网 发布:js点击图片弹出div 编辑:程序博客网 时间:2024/05/16 16:21

1、Difference between shallow copy and deep copy?

浅拷贝:只复制对象的指针,而不复制引用对象本身。

深拷贝:拷贝引用对象本身。

意思是有一个对象A,拷贝以后得到对象A_Copy,对于浅拷贝,对象A和对象A_Copy指向的是同一内存资源,复制的只不过是一指针,对象本身资源还是只有一份,如果对对象A_Copy执行一个修改操作那么对象A引用的对象同样被修改。对于深拷贝内存中将存在两份独立的对象本身。


2、what's advantage of categories? what's difference between implement a category and inheritance?

类别可以在不获悉,不改变源代码的情况下添加新方法,只能添加不能修改删除。

category新添加的方法和原来的类中的方法产生命名冲突时,category中的方法有更高的优先级,会覆盖原来的方法。

category主要3个作用:

(1).将类的实现分散到多个不同的文件或框架中。(2).创建对私有方法的前向引用。(3).向对象添加非正式协议。

inheritance可以添加,修改,删除方法,并且可以添加属性。


3、Difference between categories and extensions?

categories和extensions的主要区别是extensions中可以添加属性,extensions中添加的方法必须要实现。

extensions可以看作是一个私有的category。


 4、Difference between protocol in OC and interface in Java?

OC中的protocol有两层含义formal,informal protocol前者和java中的接口一样。

informal protocol的方法属于设计模式范畴,不是必须实现的,如果有实现就会改变类的属性。


5、What are KVO and KVC?

KVC:键-值编码是一种间接访问对象属性机制,使用字符串标识属性,而不是通过调用存取器方法,或直接通过实例变量访问的机制。主要用到的方法有setValue:forKey, valueForKey。

KVO:键值观察者,他提供了一种机制当对象的属性被修改后,则对象就会收到通知。简单的说就是每次指定被观察的对象的属性被修改了,KVO就会自动的通知观察者。


6、What's purpose of delegates?

代理目的是改变或传递控制链,允许一个类在某些特定的时刻通知到其他类,而不需要获取到那些类的指针,可以减少框架的复杂度。


7、What are mutable and immutable types of OC?

可修改和不可修改的类型,这个可以理解可以动态添加修改和不可以动态添加修改一样。

比如NSArray和NSMutableArray 前者初始化后内存空间固定不可变,后者可以添加等,可以动态申请新的内存空间。


8、我们说的oc是动态运行时语言是什么意思?

多态。 主要是将数据类型的确定由编译时,推迟到了运行时。

这个问题其实浅涉及到两个概念,运行时和多态。

简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。

多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;

那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。

也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。

因此也可以说,运行时机制是多态的基础?~~~


9、通知和协议的不同之处?

答案:协议有控制链(has-a)的关系,通知没有。

首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解

简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。

代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。

只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的

发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。

因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。


10、什么是推送消息?

答案:太简单,不作答~~~~~~~~~~

这是cocoa上的答案。

其实到不是说太简单,只是太泛泛的一个概念的东西。就好比说,什么是人。

推送通知更是一种技术。

简单点就是客户端获取资源的一种手段。

普通情况下,都是客户端主动的pull。

推送则是服务器端主动push。


11、关于多态性

答案:多态,子类指针可以赋值给父类。

多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。



12、对于单例的理解

答案:11,12题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。

基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。

进一步点,考虑下如何在多线程访问单例时的安全性。


13、说说响应链

答案: 事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。

可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。因为问的太抽象化了

严重怀疑题目出到越后面就越笼统。


14、frame和bounds有什么不同?

答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)


15、方法和选择器有何不同?

答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现.

详情可以看apple文档。


16、OC的垃圾回收机制?

答案: OC2.0有Garbage collection,但是iOS平台不提供。

一般我们了解的objective-c对于内存管理都是手动操作的,但是也有自动释放池。

但是差了大部分资料,貌似不要和arc机制搞混就好了。

求更多~~


17、NSOperation queue?

答案:存放NSOperation的集合类。

操作和操作队列,基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。

网上部分资料提到一点是,虽然是queue,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。

这边又有个疑点是,对于队列来说,先进先出的概念是Afunc添加进队列,Bfunc紧跟着也进入队列,Afunc先执行这个是必然的,

但是Bfunc是等Afunc完全操作完以后,B才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。

但是转念一想其实可以参考银行的取票和叫号系统。

因此对于A比B先排队取票但是B率先执行完操作,我们亦然可以感性认为这还是一个队列。

但是后来看到一票关于这操作队列话题的文章,其中有一句提到

因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。

瞬间觉得这个queue名字有点忽悠人了,还不如pool~

综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。


18、What is lazy loading?

答案:懒汉模式,只在用到的时候才去初始化。

也可以理解成延时加载。

我觉得最好也最简单的一个列子就是tableView中图片的加载显示了。

一个延时载,避免内存过高,一个异步加载,避免线程堵塞。


19、Can we use two tableview controllers on one viewcontroller?

是否在一个视图控制器中嵌入两个tableview控制器?

答案:一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧,

只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController,

而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController

那样的感觉。


20、Can we use one tableview with two different datasources? How you will achieve this?

一个tableView是否可以关联两个不同的数据源?你会怎么处理?

答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。

因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。

因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?





原创粉丝点击