ios面试,会被问哪些题

上传人:第*** 文档编号:31078730 上传时间:2018-02-04 格式:DOC 页数:8 大小:55KB
返回 下载 相关 举报
ios面试,会被问哪些题_第1页
第1页 / 共8页
ios面试,会被问哪些题_第2页
第2页 / 共8页
ios面试,会被问哪些题_第3页
第3页 / 共8页
ios面试,会被问哪些题_第4页
第4页 / 共8页
ios面试,会被问哪些题_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《ios面试,会被问哪些题》由会员分享,可在线阅读,更多相关《ios面试,会被问哪些题(8页珍藏版)》请在金锄头文库上搜索。

1、iOS 面试,会被问哪些题扣丁学堂学 iOS 开发毕业了,出去面试可能会遇到的面试题,扣丁学堂小丁分享。1. Objectc 的类可以多重继承么?可以实现多个接口么?Category 是什么?重写一个类的方式用继承好还是分类好?为什么?Object-c 的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成 C+的多重继承;Category 是类别,一般情况用分类好,用 Category 去重写类的方法,仅对本Category 有效,不会影响到其他类与原有类的关系。2.#import 跟#include 又什么区别,class 呢,import 跟 #import”又什么区别?#imp

2、ort 是 Objective-C 导入头文件的关键字,#include 是 C/C+导入头文件的关键字,使 用#import 头文件会自动只导入一次,不会重复导入,相当于#include 和#pragma once;class 告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import用来包含系统的头文件,#import” ”用来包含用户头文件。3.属性 readwrite,readonly,assign,retain ,copy ,nonatomic 各是什么作用,在那种情况下用?readwrite 是可读可写特性;需要生成 getter 方法和 se

3、tter 方法时readonly 是只读特性 只会生成 getter 方法 不会生成 setter 方法 ;不希望属性在类外改变assign 是赋值特性,setter 方法将传入参数赋值给实例变量;仅设置变量时;retain 表示持有特性,setter 方法将传入参数先保留,再赋值,传入参数的 retaincount会+1;copy 表示赋值特性,setter 方法将传入对象复制一份;需要完全一份新的变量时。nonatomic 非原子操作,决定编译器生成的 setter getter 是否是原子操作,atomic 表示多线程安全,一般使用 nonatomic4.对于语句 NSString*ob

4、j = NSData alloc init;obj 在编译时和运行时分别时什么类型的对象?编译时是 NSString 的类型;运行时是 NSData 类型的对象;5.常见的 object-c 的数据类型有那些, 和 C 的基本数据类型有什么区别?如:NSInteger 和 int;object-c 的数据类型有 NSString,NSNumber,NSArray ,NSMutableArray,NSData 等等,这些都是 class,创建后便是对象,而 C 语言 的基本数据类型 int,只是一定字节的内存空间,用于存放数值;而 object-c 的 NSNumber 包含有父类 NSObje

5、ct 的方法和 NSNumber 自己的方法,可以完成复杂的操作。6.id 声明的对象有什么特性?Id 声明的对象具有运行时的特性,即可以指向任意类型的 objcetive-c 的对象;7.Objective-C 如何对内存管理的 ,说说你的看法和解决方法 ?Objective-C 的内存管理主要有三种方式: ARC(自动内存计数) 、手动内存计数、内存池。8.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象需要手动释放?在和 property 结合的时候怎样有效的避免内存泄露?谁申请,谁释放遵循 CocoaTouch 的使用原则;内存管理主要要避免“过早释放”和“内存泄漏” ,对

6、于“过早释放”需要注意property 设置特性时,一定要用对特性关键字,对于“ 内存泄漏” ,一定要申请了要负责释放,要细心。关键字 alloc 或 new 生成的对象需要手动释放;设置正确的 property 属性,对于 retain 需要在合适的地方释放,9.autorelease 的对象,在什么时候会释放,autorelease 又 在什么时候使用比较合适呢?autorelease 将 release 的调用延迟了。autorelease 会将对象放入 autoreleasepool 中,当pool 释放时,所有对象都会被 release。当从一个方法中返回对象时 ,因为无法使用 re

7、lease,所以使用 autorelease 比较合适。10.代理一般是什么时候用呢?答:自身不做实际的事,要求其它类做。 代理也可用来传值。 代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。另外一点,代理可以理解为 java 中的回调监听机制的一种类似。11.有关 copy 和 retain 的区别答:retain 是指针拷贝,copy 是内容拷贝12. Object C 中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?线程创建有三种方法:使用 NSThread 创建、使用 GC

8、D 的 dispatch、使用子类化的NSOperation,然后将其加入 NSOperationQueue;在主线程执行代码,方法是 performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:13.描述一下 iOS SDK 中如何实现 MVC 的开发模式MVC 是模型、试图、控制开发模式,对于 iOS SDK,所有的 View 都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的 ViewController 都是控制层

9、,由它负责控制视图,访问模型数据。14.浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。深层复制:复制引用对象本身。意思就是说我有个 A 对象,复制一份后得到 A_copy对象后,对于浅复制来说,A 和 A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对 A_copy 执行了修改操作,那么发现 A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了两份独立对象本身。用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你

10、的克隆人还活着。15.类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。类别主要有 3 个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。(2)创建对私有方法的前向引用。(3)向对象添加非正式协议。继承可以增加,修改或者删除方法,并且可以增加属性。16.类别和类扩展的区别。答案:category 和 extensions 的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。extensio

11、ns 可以认为是一个私有的 Category。17.谈谈 KVO and KVC?答案:kvc:键 - 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。很多情况下可以简化程序代码。apple 文档其实给了一个很好的例子。kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。18.frame 和 bounds 有什么不同?答案:frame 指的是:该 view 在父 view 坐标系统中的位置和大小。 (参照点是父亲的坐标系统)bounds 指的是:该 vie

12、w 在本身坐标系统中 的位置和大小。 (参照点是本身坐标系统)19.Objectc 的类可以多重继承么?可以实现多个接口么?重写一个类的方式用继承好还是分类好?为什么?Objective-c 只支持单继承,如果要实现多继承的话,可以通过类别和协议的方式来实现,cocoa 中所有的类都是 NSObject 的子类,多继承在这里是用 protocol 委托代理 来实现的。20.MVC 是什么?答案:MVC 设计模式考虑三种对象:模型对象、视图对象、和控制器对象。模型对象代表特别的知识和专业技能,它们负责保有应用程序的数据和定义操作数据的逻辑。视图对象知道如何显示应用程序的模型数据,而且可能允许用户

13、对其进行编辑。控制器对象是应用程序的视图对象和模型对象之间的协调者。 21.自动释放池跟 GC(垃圾回收)有什么区别?iPhone 上有 GC 么?pool release和pool drain 有什么区别?iPhone 上没有 GC。iPhone 开发的时候没有垃圾回收机制。在垃圾回收环境中,release 是一个空操作。因此,NSAutoreleasePool 提供了 drain 方法,在引用计数环境中,该方法的作用等同于调用 release,但在垃圾回收环境中,它会触发垃圾回收(如果自上次垃圾回收以来分配的内存大于当前的阈值) 。因此,在通常情况下,您应该使用 drain 而不是 rel

14、ease 来销毁自动释放池。 22. 线程与进程的区别和联系?答案: 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。23.在一个对象的方

15、法里面: self.name =“object”; 和 name”object” 有什么不同吗? 答:self.name =object会调用对象的 setName()方法,name =object会直接把 object 赋值给当前对象的 name 属性。并且 self.name 这样 retainCount 会加,而 name 就不会。其他类型小谈面试题:1.讲讲 OC 和其他语言好在哪里,不好在哪里objc 优点:1)Cateogies2) Posing3) 动态识别4) 指标计算5)弹性讯息传递6) 不是一个过度复杂的 C 衍生语言7) Objective-C+ 与 C+ 可混合编程缺点

16、:1) 不支援命名空間 2) 不支持运算符重载 3)不支持多重继承 2.SEL 和一个函数指针调用同一个方法的结果是不是相同答:得到了 SEL 变量之后,可以通过下面的调用来给一个对象发送消息:对象 performSelector:SEL 变量 withObject:参数 1 withObject:参数 2;结论:SEL 只是方法名标识,实际运行时需要通过消息发送来调用 ,IMP 是”implementation”的缩 写,它是 objetive-C 方法 (method)实现代码块的地址,类似函数指针,通过它可以 直接访问任意一个方法。免去发送消息的代价。3.project workspace scheme 的区别Project:一般的某个应用单独新建一个 project 就可以了,然后把所有的程序文件都放在里面 ,这个可以满足大部分普通的需求。Workspace:项目有可能要使用其他的项目 文件,或者引入其他的静态库 文件,这个时候 worksp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号