iOS知识

作者: lever_xu | 来源:发表于2018-02-24 13:59 被阅读0次

    技术

    基础

    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

    相关文章

      网友评论

          本文标题:iOS知识

          本文链接:https://www.haomeiwen.com/subject/ehgtxftx.html