close
当前位置: 物联网在线 > 技术文库 > ios >

iOS的那些面试

笔试面试是程序员应聘绕不过的坎,想进大厂就一定要有知识储备量,而这个却是最佳的考察方式。笔者分享一些收集的iOS面试题,答案仅供参考,如有错误,还请指正。

第一部分

1.Objective-C语言的基本特点?

Objective-C语言是C语言的一个超集,只是在C的基础之上添加了面向对象(OO)的特性;Objective-C与Java语言相同都是单继承,这一点与C++语言不同(多重继承),这一点可以参看之前有关讲解继承的文章;Objective-C不支持命名空间,取而代之的是在类名之前添加前缀,以此来区分。

2.#include与#import的区别,#import与@class的区别?

1)#include和#import效果相同,只是后者不会引起交叉编译,确保头文件只会被导入一次。

2)#import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。使用#import编译效率高,防止相互包含的编译错误。

3.简述类目优缺点,如果覆盖本类或者父类的方法会出现什么问题?

优点:不需要通过增加子类而增加现有类的行为(方法),且类目中的方法与原始类方法基本没有区别。

缺点:无法向类目添加实例变量。覆盖原始类方法后,原始类的方法没办法调用。

4.简述内存管理基本原则?

如果使用alloc、copy(mutableCopy)或者retain一个对象时,你就有义务向它发送一条release或autorelease消息。其他方法创建的对象,不需要由你来管理内存。

5.什么是ARC技术?与GC是否相同?

ARC是Automatic Reference Counting的简称,我们称之为自动引用计数,是iOS5.0之后推出的内存管理的新特性。本质上还是使用引用计数来管理对象,只是我们在编写代码时,不需要向对象发送release或autorelease方法,也不可以调用dealloc方法,编译器会在合适的位置自动给用户生成release(autorelease)消息。GC是Garbage Collection,内存垃圾回收机制,ARC比GC性能好。

6.iOS中是否支持垃圾回收机制?

iOS开发只支持MRC与ARC,Mac开发支持GC垃圾回收机制,10.8之后弃用了GC,推荐使用ARC。

7.深、浅复制的基本概念以及区别?

浅复制:只复制对象本身,不对里面的属性复制。

深复制:不仅复制对象本身,对象持有的属性对象也做复制。

8.内存中的堆区和栈区的差别?

栈区(stack)由编译器自动分配释放,存放方法(函数)的参数值,局部变量的值等。

堆区(heap)一般由程序员分配与释放,若程序员不释放,则会内存溢出。

9.用户自定义了一个对象,如何实现拷贝(可变和不可变拷贝)?

必须实现copying和mutableCopying协议,表示返回一个不可变和可变的对象。否则,程序将会出现异常。

-(id)copyWithZone:(NSZone *)zone { Person *person = [[self Class] allocWithZone:zone]; person->age = self.age; person->name = self.name; return person; } -(id)mutableCopyWithZone:(NSZone *)zone;

10.定义属性时,什么时候用assign、retain、copy和nonatomic?

assign:普通赋值,一般常用于基本数据类型,常见委托设计模式,以此来防止循环引用。

retain:保留计数,获得了对象的所有权。引用计数在原有基础上加1。

copy:用来复制对象,一般字符串使用,Foundation中的不可变对象使用,效果相当于retain,只是引用计数加1。

nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。

11.strong和weak,_unsafe_unretained与weak的区别?

strong:强引用,在ARC中告诉编译器帮助我们自动插入retain。

weak:弱引用,是普通赋值,相当于手动管理内存的assign。

_unsafe_unretained:与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。

12.ARC存在内存泄露吗?

ARC中如果内存管理不当的话,同样会存在内存泄露。例如,ARC中也会循环引用导致内存泄露;Objective-C对象与CoreFoundation类之间桥接时,管理不当也会产生内存泄露。

13.当我们释放对象时,为什么需要调用[super dealloc]方法?

子类是继承自父类,那么子类中有一些实例变量(对象),是继承自父类的,因此,我们需要调用父类方法,将父类所拥有的实例进行释放。

14.自动释放池是什么,如何工作?

自动释放池是NSAutorelease类的一个实例,当向一个对象发送autorelease消息时,该对象会自动入池,待池销毁时,将会向池中所有对象发送一条release消息,释放对象。

15.为什么delegate(代理)属性都是assign而不是retain的?

防止循环引用,以至对象无法得到正确的释放。

第二部分

1.iOS开发中数据持久性有哪几种?

plist文件写入,对象归档,sqlite3数据库,CoreData。

2.什么是KVC和KVO?它们之间的关系是什么?

KVC:键值编码,是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。

KVO:键值观察,是一种能使得对象获取到其他对象属性变化的通知机制。


(责任编辑:ioter)

用户喜欢...

五个问题,闹明白低压差分信号隔离那些事

selina 在 周四, 12/14/2017 - 15:41 提交 对处于恶劣环境中的外部接口需要予以电流隔离,以增强安全性、功能性或是抗扰能力。这包括工业测量和控制所用数据采集模块当中的模拟前端,以及处理...


炒作还是未卜先知?当年那些对于云计算的预测都实现了吗?

在最初的那批云计算热潮过去数年后,让我们不妨回望下当初的那些预言,曾经的炒作剩下的是黄金还是剩饭?...


小间距LED、MiniLED与MicroLED的那些事……

最近看到很多关于MiniLED、MicroLED的文章,有些说的很对,但是有些却被传的偏离轨道。关于被误导的原因,在线君特...


模拟技术中运放补偿电容的那些事儿...

运放的相位补偿 为了让运放能够正常工作,电路中常在输入与输出之间加一相位补偿电容。 1, 关于补偿电容 理论计算有是有的,但是到了设计成熟阶段好象大部分人都是凭借以前的调试经验...


那些设计iOS API需要知道的事

为了能够将我们项目中的代码能够在后续开发者使用(重用代码),通常使用的方法是将代码按照功能模块编写成API。那么我们就很有必要了解Objective-C语言中常见的编程范式(paradigm),同...


那些关于SaaS的利弊,你应该知道的事……

云端的服务有点像打包的软件,SaaS产品很容易使用,但是很难定制化。...


关于云计算牌照申请那些事儿 为何申请以及如何申请

近期资本市场对光环新网云计算的牌照(全称:互联网资源协作服务)很关注,我们预期牌照的发放相对确定,只是...


测试界的那些杠杠的设备是如何炼成的?

selina 在 周一, 09/25/2017 - 09:33 提交 子曰:“工欲善其事,必先利其器”。 如今生活在“无线通信”世界的我们,对于信号的测试基准的要求也越来越高。ADI深知,用于设计和测试智能设备的...


iOS 面试总结

在新 iOS 上正常的应用,到了老版本 iOS 上秒退最常见原因是系统动态链接库或Framework无法找到。这种情况通常是由于 App 引用了一个新版操作系统里的动态库(或者某动态库的新版本)或只有...


云计算厂商的那些赚钱“套路”

云计算产品繁多,IaaS层云产品是按资源池付费,要先看超卖比再看市场价,PaaS服务是按量付费,直接看成本和市场价...