iOS面试题

1. OC语言的基本特点

OC语言是C语言的一个超集,只是在C的基础之上加上了面向对象(oo)的特性;
OC与Java语言相同都是单继承,这一点与C++语言不同(多重继承);
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. 内存中的堆区和栈区的差别

栈区(stack)由编译器自动分配释放,存放方法(函数)的参数值,局部变量的值等,堆区(heap)一般由程序员分配和释放,程序员不释放,则内存溢出

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

(1)assign:普通赋值,一般常用于基本数据类型,常见委托设计模式,以此来防止循环引用。
(2)retain:保留计数,获得对象的所有权。引用计数在原有基础上面加1。
(3)用来复制对象,一般字符串使用copy,Foundation 中的不可变对象使用copy效果相当于retain,只是引用计数+1。
(4)nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能

8. strong 与weak , _unsafe_unretained与weak的区别

(1)strong叫强引用,weak 叫弱引用,在ARC中,使用strong告诉编译器帮助我们自动插入retain,weak是普通赋值相当于手动管理内存的assign,
(2)_unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。

9. ARC存在内存泄露吗?

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

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

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

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

plist文件写入,对象归档,sqlite3数据库、coredata

12. 什么是KVC 和 KVO ?以及它们之间的关系是什么?

(1)KVC(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量
(2)KVO(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
(3)实现KVO键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础或者说KVO的实现是建立在KVC的基础之上的。

13. 简述常见的设计模式

单例设计、代理设计、观察者(通知)、工厂方法、模板方法

14. 内存管理 在dealloc 方法中 用realease方法好还是用self.xxx=nil 好?

使用self.xxx = nil 更好,因为先调用了realease方法,而且还将变量设置为nil,这样就更安全的释放对象,防止野指针调用

15. 线程与进程的区别和联系?

一般的应用程序是单个进程,也有多进程(谷歌浏览器),进程是个静态的容器,里面容纳了很多个线程,线程是一系列方法的线性执行路径。

16. OC语言的优缺点:

(1)优点:类目、动态识别、支持C语言、OC与C++可以混编
(2)缺点:不支持命名空间、不支持运算符重载、不支持多重继承

17. 代理delegate与通知Notification、block的使用区别

delegate与block一般是用于两个对象1对1之间的通信交互,delegate需要定义协议方法,代理对象实现协议方法,并且需要建立代理关系才可以实现通信。block更加简洁,不需要定义繁琐的协议方法,但是如果通信事件比较多的话,建议使用delegate。Notification主要用于1对多情况下通信,而且通信对象之间不需要建立联系!但是使用通知代码可读性差。

18. 控制器ViewController的loadView,viewDidLoad,viewDidUnload分别是在什么时候调用的?

(1)loadView调用:当控制器的根视图view为空,且此view被访问时则调用
(2)loadView调用之后调用viewDidLoad
(3)iOS6.0之前,当内存警告时,先卸载视图,再调用ViewDidUnload来释放内存

19. @synthesize 和 @dynamic 的区别

(1)@synthesize 是系统自动生成getter 和setter属性声明
(2)@dynamic 的意思是告诉编译器,属性的获取与赋值方法由用户自己实现,不自动生成。

20. 事件响应者链的概念

响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件将沿着响应者链向上传递,交给下一个响应者(next responder)。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象(如果存在),然后是它的父视图(superview)对象(如果存在),以此类推,直到顶层视图。接下来会沿着顶层视图(top view)到窗口(UIWindow对象)再到程序(UIApplication对象)。如果整个过程都没有响应这个事件,该事件就会被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。但有时候可以在视图的响应方法中根据一些条件判断来决定是否需要继续传递事件。

21. C语言中static变量和static函数有什么作用?

(1)表示变量是静态存储变量,表示变量存放在静态存储区
(2)加在函数前面的时候表示该函数是内部连接,只在本文件中有效,别的文件中不能应用该函数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容