iOS面试提纲

2019-01-15  本文已影响0人  砽洧泩

1、设计模式是什么? 你知道哪些设计模式,并简要叙述?

设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事情。

1). MVC模式:Model View Control,把模型 视图 控制器 层进行解耦合编写。

2). MVVM模式:Model View ViewModel 把模型 视图 业务逻辑 层进行解耦和编写。

3). 单例模式:通过static关键词,声明全局变量。在整个进程运行期间只会被赋值一次。4). 观察者模式:KVO是典型的通知模式,观察某个属性的状态,状态发生变化时通知观察者。

5). 委托模式:代理+协议的组合。实现1对1的反向传值操作。

6). 工厂模式:通过一个类方法,批量的根据已有模板生产对象。

2、MVC 和 MVVM 的区别

1). MVVM是对胖模型进行的拆分,其本质是给控制器减负,将一些弱业务逻辑放到VM中去处理。

2). MVC是一切设计的基础,所有新的设计模式都是基于MVC进行的改进。

3、#import跟 #include 有什么区别,@class呢,#import<> 跟 #import””有什么区别?

答:1).#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入。

2).@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含。

3).#import<>用来包含系统的头文件,#import””用来包含用户头文件。

4、frame 和 bounds 有什么不同?

1).frame指的是view在父视图的大小和位置。

2).bounds指的是在本身坐标系统上的大小和位置。

5、Objective-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

答:Objective-C的类不可以多重继承;可以实现多个接口(协议);Category是类别;一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

6、@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的

@property的本质是什么?@property= ivar +getter+setter;“属性” (property)有两大概念:ivar(实例变量)、getter+setter(存取方法)“属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。 Objective-C 对象通常会把其所需要的数据保存为各种实例变量。实例变量一般通过“存取方法”(access method)来访问。其中,“获取方法” (getter)用于读取变量值,而“设置方法” (setter)用于写入变量值。

7、@property中有哪些属性关键字?/ @property 后面可以有哪些修饰符?

属性可以拥有的特质分为四类:

1.原子性---nonatomic特质

2.读/写权限---readwrite(读写)、readonly(只读)

3.内存管理语义---assign、strong、weak、unsafe_unretained、copy

4.方法名---getter= 、setter=

5.不常用的:nonnull,null_resettable,nullable

8、属性关键字 readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

1).readwrite是可读可写特性。需要生成getter方法和setter方法。

2).readonly是只读特性。只会生成getter方法,不会生成setter方法,不希望属性在类外改变。3).assign是赋值特性。setter方法将传入参数赋值给实例变量;仅设置变量时,assign用于基本数据类型。

4).retain(MRC)/strong(ARC) 表示持有特性。setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1。

5).copy表示拷贝特性。setter方法将传入对象复制一份,需要完全一份新的变量时。6).nonatomic非原子操作。决定编译器生成的setter和getter方法是否是原子操作,atomic表示多线程安全,一般使用nonatomic,效率高。

上一篇下一篇

猜你喜欢

热点阅读