技术
基础
1、为什么说Objective-C是一门动态的语言?
Objective-C,类别与消息的关系比较松散,调用方法视为对对象发送消息,所有消息都被视为对消息的回应。所有消息的处理直到运行时才会动态决定,并交由类别自行决定如何处理收到的消息。
2、讲一下MVC和MVVM,MVP
-
MVC
- 视图(View):构建UI的类;
- 模型(Model):视图类所需要的数据;
- 控制器(Controller):连接视图类和模型类,使数据显示在屏幕上。
控制器可以直接访问模型:将模型直接作为控制器的属性。
控制器可以直接访问视图:将视图直接作为控制器的属性。
模型与视图无法直接访问对方:二者完全解耦,不能引用对方,把对方设置为属性。
视图到控制器的通信:
-
目标动作机制(target - action):用户与视图交互触发控制器的方法。例如:点击按钮后实现视界面跳转,网络请求,刷新UI等。
-
委托机制(delegate):视图向控制器询问某些自己无法决定的事情,或是让控制器帮助自己做一些自己独立无法完成的事情。
-
数据源机制(dataSource):视图让控制器给它将要显示的数据。
模型到控制器的通信:
-
广播机制(Notification):控制器注册监听某模型数据变化的广播频道,当此模型数据变化后向该控制器发送广播,告知模型变化情况。
-
KVO机制(Key-Value Observing):模型作为控制器的属性,当模型属性被修改后,持有此模型属性的控制器就会收到通知。
-
MVP
-
MVVM
这个图解准确地描述了什么是 MVVM:一个 MVC 的增强版,我们正式连接了视图和控制器,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。MVVM 听起来很复杂,但它本质上就是一个精心优化的 MVC 架构
- MVVM 可以兼容你当下使用的 MVC 架构。
- MVVM 增加你的应用的可测试性。
- MVVM 配合一个绑定机制效果最好。
objc MVVM介绍
3、为什么代理要用weak?代理的delegate和dataSource有什么区别?block和代理的区别?
代理使用weak是为了避免循环引用。
A data source is almost identical to a delegate. The difference is in the relationship with the delegating object. Instead of being delegated control of the user interface, a data source is delegated control of data.
delegate控制的是用户交互,而DataSource控制的是数据。他们只是与被代理对象的关系不同,其余一致。
Delegation 是一种很清晰回调形式,从 Protocol 的建立,到之后的引用,和对于 delegate 声明的变量处理,都非常具有条理。但需要对 delegate 本体进行一定的验证核对,防止出现方法对象为空的情况,同时代码的可读性会下降。
Block 解决了 Delegation 在确认声明对象上的问题,同时代码可读性较强,但缺点是比较容易导致循环引用。
如果是一个不定期触发或者会多次触发的回调,使用Delegation;如果这个回调是一个一次性的,并且和调用方法是单线性关系的,那么 Block 应该更适合;如果这个回调是广播性质的,需要很多个不同的类都接收到,那么 NSNotification 更适合。
4、属性的实质是什么?包括哪几个部分?属性默认的关键字都有哪些?@dynamic关键字和@synthesize关键字是用来做什么的?
属性主要由ivar(实例变量)、存取方法(access method = getter + setter)组成;
@synthesize 的语义是如果你没有手动实现 setter 方法和 getter 方法,那么编译器会自动为你加上这两个方法。
@dynamic 告诉编译器:属性的 setter 与 getter 方法由用户自己实现,不自动生成。
5、属性的默认关键字是什么?
基本数据类型默认关键字是atomic,readwrite,assign
普通的 Objective-C 对象是atomic,readwrite,strong
网友评论