中级iOS开发面试题

1:MVC的理解

MVC设计模式考虑三种对象:数据模型对象,视图对象和控制器对象。

数据模型:负责存储、定义、操作数据;

视图:展示数据给用户,和用户进行操作交互;

控制器:M与V的协调者,控制获取数据,将数据交给视图去展示。

2:线程和进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位;

线程是进程的一个实体,是CPU调度和分派的一个基本单位,是比进程更小的一个独立运行的基本单位,线程基本上不拥有系统资源,只拥有一点在运行中必不可少的基本资源(如程序计数器,一组寄存器和栈),一个线程可是创建和撤销另一个线程。

线程和进程的关系:

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;

资源分配给进程,统一进程中的多个线程可以共享进程中的线程;

线程在执行过程中,要实现协作同步。不同进程的线程间要利用消息通信的办法实现同步;

真正在处理机上运行的是线程;

线程是进程内的一个可执行单元,也是进程内的可调度实体。

线程和进程的区别:

调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位;

并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行;

拥有资源:进程是拥有资源的一个基本单位,线程不拥有系统资源,但可以访问隶属于进程的资源;

系统开销:创建或者撤销进程的开销比较大。(因为系统在这个过程中要分配或者撤销系统资源)

3:进程的同步机制

原子操作、信号量机制、自旋锁、分布式系统等

4:进程死锁的原因

资源竞争以及程序推进顺序非法

5:死锁的四个必要条件

互斥、请求保持、不可剥夺、环路

6:死锁的处理策略

鸵鸟策略、预防策略、检测与接触死锁

7:KVC、KVO

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

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

实现KVO键值观察模式,被观察的对象必须使用KVC的键值编码机制来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础,或者说KVO的实现是建立在KVC的基础之上。

8:深复制和浅复制

深复制:不仅复制对象本身,也要复制对象所持有的属性;

浅复制:只复制对象本身,而不对其属性进行复制。

9:定义属性的时候,什么时候用assign、retain、copy、nonatomic?

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

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

copy:一般在字符串中使用copy。Foundation中不可变对象使用copy效果相当于retain,只是引用计数+1;

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

10:strong与weak,_unsafe_unretained与weak的区别。

strong是强引用,weak是弱引用,在ARC中,strong相当于retain,weak相当于assign,要注意的一点是,即使在ARC情况下,代理的属性依然使用assign,以防止循环引用;

_unsafe_unretained与weak功能一致,区别在于当志向的对象销毁后,weak的指针将变为nil,防止出现野指针。

11:ARC存在内存泄露吗?

循环引用会导致内存泄露,Object-C与CoreCoundation进行桥接的时候如果管理不当也会造成内存泄露。

12:事件响应者链

响应者链表示一系列的响应者对象。事件被交给第一个响应者处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder),

View-ViewController-Window-Application-丢弃事件

13:SVN或者是git的使用

14:打包静态库

15:App发布的上架流程

16:Storyboard的使用

时间: 2024-12-13 07:14:00

中级iOS开发面试题的相关文章

iOS开发面试题(中级)

//想面试的童鞋们来看看自己会多少, 老鸟可以无视直接绕过...1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?与Extension(延展)的主要区别? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别(分类, 类目),一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系.通常情况下

【面试】iOS 开发面试题(二)

1. 我们说的oc是动态运行时语言是什么意思? 答案:多态. 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 多态:不同对象以自己的方式响应相同的消息的能力叫做多态.意思就是假设生物类(life)都用有一个相同的方法-eat; 那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法. 也就是不同的对象以自己的

M牛C原创博客——IOS开发面试题(葵花宝典)

GCD怎么用的? ? 1.串行队列,同步操作,不会新建线程,操作顺序执行: ?   串行队列,异步操作,会新建线程,操作顺序进行,使用场景:既不影响主线程,又需要顺序执行的操作: ? 2.并行队列,同步操作,不会新建县城,操作顺序执行: ?   并行队列,异步操作,会新建线程,操作无序进行,队列前如果有其他任务,会等待其他任务执行完毕再执行: ? 全局队列是系统的,直接get就可以用 ? UI的更新工作必须在主线程进行, ? 全局队列异步操作,会新建对个子线程,操作无序执行,如果队列前有其他任务

【面试】iOS 开发面试题(一)

  1. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import""又什么区别? 答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包

【面试】iOS 开发面试题(三)

1.iOS数据持久化存储方案有哪些? 参考答案: plist属性列表存储(如NSUserDefaults) 文件存储(如二进制数据写入文件存储,通过NSFileManager来操作将下载起来的二进制数据写一篇文件中存储) NSKeydeArchiver归档存储,常见的是自动化归档/解档处理,想要学习如何通过runtime实现自动化归档/解档,可 数据库SQLite3存储(如FMDB.Core Data) 2.沙盒的目录结构是怎样的?各自一般用于什么场合? 参考答案: Application:存放

objective-c/ios开发面试题(答案)

一.简答题 1.Objective-C的类可以多重继承么?可以采用多个协议么? 不可以多重继承,可以采用多个协议. 2.#import和#include的区别是什么?#import<> 跟 #import""有什么区别? #import能避免头文件被重复包含的问题: 1.  一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include. 使用include要注意重复引用的问题: class A,class B都引用了class C

ios开发面试题(二)

1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身.深层复制:复制引用对象本身.意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想.深复制就好理解了,内

ios开发面试题(一)

1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以实现多个接口,通过实现多个接口可以完成C++的多重继承:Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么

盘点2016年iOS开发面试题及答案整理

在现如今,随着移动互联网科技不断的发展和创新,如今无论是公司还是开发者或设计师个人而言,面试都是一项耗时耗钱的项目,而面对iOS开发者及设计师在面试时可能会遇到的问题进行了筛选与汇总.下面我们一起来一下吧. 1.简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic .atomic.str