答:设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
(1)MVC设计模式:模型(M)-视图(V)-控制器(C)模式,可将您的代码分割为几个独立的部分。模型部分定义应用程序的数据引擎,负责维护数据的完整性;视图部分定义应用程序的用户界面,对显示在用户界面上的数据出处则没有清楚的认识;控制器部分则充当模型和控制器的桥梁,帮助实现数据和显示的更新。
(2)Delegateion模式:这个设计模式有助于一个对象的数据传输到另一个对象。delegateion通过protocol实现的。
(3)委托模式:可以对复杂对象进行修改而不需要子类化。与子类化不同的是,您可以照常使用复杂对象,而将对其行为进行修改的定制代码放在另一个对象中,这个对象就称为委托对象。复杂对象需要在预先定义好的时点上调用委托对象的方法,使其有机会运行定制代码。
(4)Target-action设计模式:这个设计模式用按钮,等控件把用户的交互变成代码,让程序可以执行。然后控件通过用户交互通知给您的应用程序,当用户以预先定义好的方式(比如轻点一个按键),进行交互时,控件就会将消息发送给你指定的对象,接收到消息后,目标对象就会以恰当的方式进行响应(例如在点击按钮会更新应用状态)
(5)单例设计模式:单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问。单例使用场景一般在程序中,它经常用于只希望一个类只有一个实例。
(6)观察这模式:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
2.
简述Notifi cationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
(1)NotificationCenter消息中心:消息的发送者告知接收者事件已经发生或者将要发送,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系,类似于广播的形式。
Notification多用于通知多个Object某个事件。
(2)KVC:键值编码,可以直接通过字符串的名字(key)来间接访问属性的机制,而不是通过调用getter和setter方法访问。
(3)KVO:是一个对象能够观察另外一个对象的属性的值,并且能够发现值的变化,更适合任何类型的对象侦听另外一个任意对象的变化,这是一个对象与另外一个对象保持同步的一种方法,即另一个对象发生改变时,观察者立马做出反应。
它只能用来对属性做出反应,而不会用来对方法或者动作做出反应。
用key paths来观察属性也可以观察嵌套对象。
缺点:观察的属性使用strings来定义,因此在编译器不会检查并出现警告。
(4)Delegate:类A调用类B, 当类B想回调类A的方法的时候, 要用到delegate。多用于发送者希望接受到接受者的某个功能反馈值。
3.
你是如何理解懒汉加载的呢?
答:懒加载(对象在getter方法里面初始化),又称为延迟加载。在程序启动的时候不加载资源,只有在运行需要一些资源时,再去加载这个资源。
好处:不必将创建对象的代码全部写到viewDidLoad方法中,代码的可读性更强。
每个属性的getter方法中分别负责各自的实例化方法,代码彼此之间的独立性强,松耦合。
只有当真正需要资源时,再去加载,节省了内存资源。
4.
谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其它的OC设计模式和别而设计模式吗?
MVC就是Model-View-Controller的缩写,M指的是业务模型,V指的是用户页面,C指的是控制器。MVC是架构模式,是讲M和
V的代码分离,从而使同那个一个程序可以使用不同的表现形式。
M:表示数据和业务规则,V是用户看到的并与之交互的页面,C是接受用户的输入并调用M和V取完成用户需求的
单例,代理,观察者,工厂模式等
单例模式:说白了就是一个类不通过alloc方式创建对象,而是用一个静态方法返回这个类的对象。系统只需要拥有一个的
全局对象,这样有利于我们协调系统整体的行为;
代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品,并不想
直接卖给用户,而是搞了很多代理商,用户可以直接找代理商买东西,代理商从工厂进货.常见的如QQ的自动回复就属于代
理拦截,代理模式在iphone中得到广泛应用.
观察者模式: 当一个物体发生变化时,会通知所有观察这个物体的观察者让其做出反应。实现起来无非就是把所有观察者的
对象给这个物体,当这个物体的发生改变,就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的;
5.
答:单例模式是iOS常用设计模式中的一种。单例设计模式的作用是使得这个类的一个对象成为系统中的唯一实例,因此需要用一种唯一的方法去创建这个对象并返回这个对象的地址。那么,我们何时使用单例模式呢?
1、类只能有一个实例,而且必须从一个为人熟知的访问点对其访问。
2、这个唯一的实例只能通过子类化进行扩展,而且扩展的对象不会破坏客户端代码。