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)

用户喜欢...

分享:6个公司的大数据岗位的面试经验

作者: 锋云帮主 本人住在有人间天堂之称的城市,6年多开发经验,最近2年主要在做大数据相关的开发,最近考虑换...


MySQL进行Replace操作时造成数据丢失——那些坑你踩了吗?

作者:o翡翠谷o 公司开发人员在更新数据时使用了 replace into 语句,由于使用不当导致了数据的大量丢失,到底是如何...


关于瑞天智能全自动激光打标机的那些事儿

作为电子制造行业规模空前、精英云集的产业盛宴,NEPCON South China 2017(第23届华南国际电子生产设备暨微电子工业展...


人工智能那些事儿

作者:Erik Brynjolfsson  Andrew McAfee 在过去的250多年里,技术创新一直是经济发展的根本推动力。这些技术创新中最重要...


激光?流明?4K?那些你不清楚的激光电视的概念通通在这里

太阳光和电灯光看起来似乎是白色的,但当让它通过一块三棱镜,就可以看到红、橙、黄、绿、蓝、青、紫七种颜色...


马云:我没必要去冲击所有行业,而是那些不思进取的

淘宝和顺丰的冲突我也可以趁此讲一下。事发时我在巴黎,顺丰王卫给我发了条简讯,其实我也是看媒体报导才知道...


智能手机怎样实现AR技术 那些手机AR功能

智能手机怎样实现AR技术?哪些手机有AR功能? 单说AR技术也许有些人会觉得陌生,但AR技术已经融入了我们的生活中...


盘点汽车上的那些传感器

现在的汽车越来越智能化,汽车上的很多功能都由电脑来控制完成,比如说发动机系统、变速箱系统、悬架系统、制...


爬虫需谨慎!那些你不知道的爬虫反爬虫套路 学起来

作者:崔广宇 前言 爬虫与反爬虫,是一个很不阳光的行业。 这里说的不阳光,有两个含义。 第一是,这个行业是隐...


夏季达沃斯上那些有关大数据的言论,全球范围每产生1美元消费就有12美分来自中国

36大数据专稿日前,主题为“在第四次工业革命中实现包容性增长”的夏季达沃斯(世界经济论坛 World Economic Forum)在我...