iOS精选面试题①
1.OC语言的基本特点
1⃣️OC语言是C语言的一个超集,只是在C的基础上加上了面向对象的特性
2⃣️OC与Java语言相同都是单继承,这一点与C++语言不同(多重继承)
3⃣️OC不支持命名空间机制,取而代之的是在类名之前添加前缀,以此来区分
2.#include与#import的区别、#import与@class的区别
1⃣️#include与#import的区别:#include与#import的效果相同,只是后者不会引起交叉编译,确保头文件只会被导入一次
2⃣️#import与@class的区别:#import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会在告诉,使用#import效率高,防止相互包含的编译错误。
3.简述类目优点和缺点,如果覆盖本类或者父类的方法,会出现什么问题
1⃣️优点:不需要通过增加子类而增加现有类的行为(方法),且类目中的方法与原始类方法基本没有区别
2⃣️缺点:无法向类目添加实例变量。覆盖原始类方法后,原始类的方法没办法调用
4.简述内存管理基本原则
如果使用alloc、copy(mutableCopy)或者retain一个对象时,你就有义务向他发送一条release或者autorelease消息。其他方法创建的对象,不需要由你来管理内存。
5.什么是ARC技术?与GC是否相同?
ARC是Automatic Reference Counting的简称,我们称之为自动引用计数,是iOS5.0之后推出的内存管理的新特性。本质上还是使用引用计数来管理对象,只是我们在编写代码是,不需要向对象发送release或者autorelease方法,也不可以调用delloc方法,编译器会在合适的位置自动给用户生成release消息(autorelease)。GC的全称是garbage collection,内存垃圾回收机制,ARC比GC性能好。
6.iOS中是否支持垃圾回收机制?
iOS开发只支持手动内存管理(MRC)与自动内存管理(ARC),Mac开发支持GC垃圾回收机制,10.8之后弃用了垃圾回收机制(GC),推荐使用ARC。
7.深、浅复制的基本概念以及他们的区别
浅复制:只复制对象本身,不对里面的属性复制。
深复制:不仅复制对象本身,对象持有的属性对象也做复制。