ios面试题锦集(带答案).pdf
《ios面试题锦集(带答案).pdf》由会员分享,可在线阅读,更多相关《ios面试题锦集(带答案).pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、iOS 面试题锦集 1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个A 对象,复制一份后得到A_copy对象后,对于浅复制来说,A 和 A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对 A_copy 执行了修改操作,那么发现 A 引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。用网上一哥们通俗的话将就是:浅复制好
2、比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着.2.What is advantage of categories?What is difference between implementing a category and inheritance?类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有3 个作用:(1)将类的实现分散到多个不同文件或多个不同框架中
3、。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。3.Difference between categories and extensions?类别和类扩展的区别。答案:category 和 extensions 的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。extensions 可以认为是一个私有的 Category。4.Difference between protocol in objective c and interfaces in java?obc 中的协议和 java 中的接口概念有何不同?答案:OB
4、C 中的代理有 2 层含义,官方定义为 formal 和 informal protocol.前者和Java 接口一样。informal protocol 中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。这么看,总觉得类别这玩意儿有点像协议的可选协议。
5、现在来看,其实 protocal 已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用 interface 修饰“,现在我们看到协议中两个修饰词:“必须实现(requied)”和“可选实现(optional)”。5。What are KVO and KVC?答案:kvc:键-值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制.很多情况下可以简化程序代码。apple 文档其实给了一个很好的例子。kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。比如
6、我自定义的一个buttoncpp self addObserver:self forKeyPath:”highlighted”options:0 context:nil;#pragma mark KVO -(void)observeValueForKeyPath:(NSString)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context if(keyPath isEqualToString:highlighted”)self setNeedsDisplay;对于系统是根据 keypath 去
7、取的到相应的值发生改变,理论上来说是和 kvc 机制的道理是一样的。对于 kvc 机制如何通过 key 寻找到 value:“当通过 KVC调用对象时,比如:self valueForKey:”someKey时,程序会自动试图通过几种不同的方式解析这个调用。首先查找对象是否带有 someKey 这个方法,如果没找到,会继续查找对象是否带有 someKey 这个实例变量(iVar),如果还没有找到,程序会继续试图调用-(id)valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出一个 NSUndefinedKeyException 异常错误。( 注:Key
8、Value Coding 查找方法的时候,不仅仅会查找someKey 这个方法,还会查找 getsomeKey 这个方法,前面加一个 get,或者_someKey 以及_getsomeKey 这几种形式.同时,查找实例变量的时候也会不仅仅查找 someKey 这个变量,也会查找_someKey 这个变量是否存在.)设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey 方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求.这样做有很多好处,下面的两个例子说明了这样做的好处。“来至 cocoa,这个说法应该挺有道理。因为我们知道 b
9、utton 却是存在一个 highlighted 实例变量.因此为何上面我们只是 add 一个相关的 keypath 就行了,可以按照 kvc 查找的逻辑理解,就说的过去了.6。What is purpose of delegates?代理的作用?答案:代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。另外一点,代理可以理解为 java 中的回调监听机制的一种类似。7.What are mutable and immutable types in Objective C?obc中可修改和不可以修改类型。答案:可修改不可修改的集合
10、类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。比如 NSArray 和 NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。8。When we call objective c is runtime language what does it mean?我们说的 obc 是动态运行时语言是什么意思?答案:多态。主要是将数据类型的确定由编译时,推迟到了运行时.这个问题其实浅涉及到两个概念,运行时和多态。简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。多态:不同对象以自己的方式响
11、应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;那人类属于生物,猪也属于生物,都继承了 life 后,实现各自的 eat,但是调用是我们只需调用各自的 eat 方法.也就是不同的对象以自己的方式响应了相同的消息(响应了 eat 这个选择器).因此也可以说,运行时机制是多态的基础?9.what is difference between NSNotification and protocol?通知和协议的不同之处?答案:协议有控制链(has-a)的关系,通知没有.首先我一开始也不太明白,什么叫控制链(专业术语了)。但是简单分析下通知和代理的行为模式,我们大
12、致可以有自己的理解简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者.代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理 A明星要一个发布会,代理人发出处理发布会的消息后,别称 B 的发布会了.但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理.因此控制链(has-a 从英语单词大致可以看出,单一拥有和可控制的对应关系。10.What is push notification?什么是推送消息?11.Polymorphism?关
13、于多态性 答案:多态,子类指针可以赋值给父类。这个题目其实可以出到一切面向对象语言中,因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来。最重要的是转化成自我理解。12。Singleton?对于单例的理解 答案:11,12 题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。进一步点,考虑下如何在多线程访问单例时的安全性。13.What is responder chain?说说响应链 答案:事件响应链.包括点击事件,画面刷新事件等。在视图栈内从
14、上至下,或者从下之上传播。可以说点事件的分发,传递以及处理。具体可以去看下touch事件这块。因为问的太抽象化了严重怀疑题目出到越后面就越笼统。14。Difference between frame and bounds?frame 和bounds 有什么不同?答案:frame 指的是:该 view 在父 view 坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds 指的是:该 view 在本身坐标系统中 的位置和大小.(参照点是本身坐标系统)15.Difference between method and selector?方法和选择器有何不同?答案:selector 是一个方法
15、的名字,method 是一个组合体,包含了名字和实现。详情可以看 apple 文档。16.Is there any garbage collection mechanism in Objective C.?OBC 的垃圾回收机制?答案:OBC2。0 有 Garbage collection,但是 iOS 平台不提供。一般我们了解的objectivec 对于内存管理都是手动操作的,但是也有自动释放池。但是差了大部分资料,貌似不要和 arc 机制搞混就好了。求更多 17。NSOperation queue?答案:存放 NSOperation 的集合类。操作和操作队列,基本可以看成 java 中的线
16、程和线程池的概念。用于处理 ios 多线程开发的问题。网上部分资料提到一点是,虽然是 queue,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。这边又有个疑点是,对于队列来说,先进先出的概念是 Afunc添加进队列,Bfunc 紧跟着也进入队列,Afunc 先执行这个是必然的,但是Bfunc 是等 Afunc 完全操作完以后,B 才开始启动并且执行,因此队列的概念离乱上有点违背了多线程处理这个概念。但是转念一想其实可以参考银行的取票和叫号系统.因此对于 A 比 B 先排队取票但是 B 率先执行完操作,我们亦然可以感性认为这还是一个队列。但是后来看到一票关于这操作队列话题的文章
17、,其中有一句提到“因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。”瞬间觉得这个 queue 名字有点忽悠人了,还不如 pool综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。18。What is lazy loading?答案:懒汉模式,只在用到的时候才去初始化。也可以理解成延时加载。我觉得最好也最简单的一个列子就是 tableView 中图片的加载显示了。一个延时载,避免内存过高,一个异步加载,避免线程堵塞。19。Can we use two tableview controllers on one viewcontroller?是否在一个视图控制器中嵌
18、入两个tableview 控制器?答案:一个视图控制只提供了一个View 视图,理论上一个 tableViewController也不能放吧,只能说可以嵌入一个 tableview 视图。当然,题目本身也有歧义,如果不是我们定性思维认为的 UIViewController,而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController 那样的感觉。20.Can we use one tableview with two different datasources?How you will achieve this?一个 table
19、View是否可以关联两个不同的数据源?你会怎么处理?答案:首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源.因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?21.Objectc 的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?Objective-c 只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现,cocoa 中所有的类都是 NSObject 的子类,多继承在
20、这里是用 protocol 委托代理 来实现的.22。#import 跟include 又什么区别 import 跟#import又什么区别?答案:class 一般用于头文件中需要声明该类的某个实例变量的时候用到,在m 文 件中还是需要使用#import 而import 比起#include 的好处就是不会引起交叉编译.以下没标准答案 23。类变量的protected,private,public,package声明各有什么含义?()24。id 声明的对象有什么特性?答案:id 是个很重要的类型,是个可以指向任何类型的指针或者可以理解为指向任何未知类型的指针.25.MVC 是什么?有什么特性?
21、为什么在 iPhone 上被广泛运用?答案:MVC 设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表 特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户对其进行编辑。控制 器对象是应用程序的视图对象和模型对象之间的协调者。26。对于语句 NSString*testObject=NSData alloc init;testObject 在编译时和运行时分别是什么类型的对象?27.什么是安全释放?28。为什么有些 4。0 独有的 objectivec 函数在 3.1 上运行时会报错.而 4。0 独有的类
22、在 3.1 上分配内存时不会报错?分配的结果是什么?29。为什么 4.0 独有的 c 函数在 3。1 的机器上运行不会报错(在没有调用的情况下?)而 4.0 独有的类名在 3。1 的机器上一运行就报错?30。异常 exception 怎么捕获?不同的 CPU 结构上开销怎样?C 中又什么类似的方法?31.property 中属性 retain,copy,assgin 的含义分别是什么?有什么区别?将其转换成 getset 方法怎么做?有什么注意事项?32。委托是什么?委托的 property 声明用什么属性?为什么?33。浅拷贝和深拷贝区别是什么?。.34。Cocoa 中有虚基类的概念么?怎么
23、简洁的实现?35.自动释放池跟 GC(垃圾回收)有什么区别?iPhone 上有GC 么?pool release 和pool drain有什么区别?iPhone 上没有 GC.iPhone 开发的时候没有垃圾回收机制.在垃圾回收环境中,release 是一个空操作。因此,NSAutoreleasePool 提供了drain 方法,在引用计数环境中,该方法的作用等同于调用 release,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当前的阈值)。因此,在通常情况下,您应该使用 drain 而不是 release 来销毁自动释放池。36.for(int index=0
24、;index 20;index+)NSString*tempStr=tempStr”;NSLog(tempStr);NSNumber*tempNumber=NSNumber numberWithInt:2;NSLog(tempNumber);这段代码有什么问题。?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?37.内存管理的几条原则时什么?按照默认法则。那些关键字生成的对象需要手动释放?在和 property 结合的时候怎样有效的避免内存泄露?38。在一个对象释放前。如果他被加到了 notificationCenter 中.不在 not
25、ificationcenter中 remove 这个对象可能会出现什么问题?39。怎样实现一个 singleton 的类.给出思路。40.什么是序列化或者 Acrchiving,可以用来做什么,怎样与copy 结合,原理是什么?。41.线程与进程的区别和联系?答案:进程和线程都是由操作系统所体会的程序运行的基本 单元,系统利用该基本单元实现系统对应用的并发性.程和线程的主要差别在于它们是不同的操作系统资源 管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变 量,但线程之间没有单独的地址空间,一个线程死
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ios 试题 答案
限制150内