您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 【4】IOS面试题--设计模型
1.解释一下面向对象?面向对象是一种程序设计的范型,同时也是一种程序开发的方法。面向对象是将现实世界中的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。面向对象更利于人的理解方式,对复杂的系统进行分析、设计与编程。此外,面向对象能有效的提高编程的效率,通过封装技术、消息机制可以快速的搭建出一个系统。面向对象主要内容:对象、类、方法。面向对象的语言是高级的语言,比如java、c++、c#、OC等面向对象的三大特性?面向对象的三大特性:继承、封装、多态。继承:子类自动共享父类非私有数据结构和方法的机制,是类之间的一种关系。继承是面向对象语言特有的,面向过程的语言不具有继承特性。Objective-C是单继承。继承提供了类的规范等级结构,使公共的特性能够共享,提高了软件的重用性。类的继承性使所建的软件具有开发性、可扩充性,简化了对象、类的创建工作量,提高了代码的重用性。封装:在面向对象的语言中,对象、类、方法都是一种封装。对象是封装的最基本单位。类的封装体现在每个类都有.h和.m两个文件,将定义与实现分开,内部的实现可以根据需要设置不同的作用域对信息提供保护。.h头文件中放方法的声明(用户可见的外部接口),.m中方法的实现(用户不可见内部实现)。方法的封装是最常见的,每个方法中封装了一个小的功能,这是单一职责的很好体现。当然,我们使用的第三方框架和代码,也是一种封装。封装可以使程序的结构更加清晰,将实现的信息封装隐藏,用的时候直接调用封装好的方法或者类,提高效率。此外,可以减少程序间的相互依赖。(修改代码的时候,只需要找到实现的方法修改,方法的调用等不需要修改)多态:用父类指针指向子类的对象。通过不同的对象调用相同的名称的方法,却产生不同的结果。通过父类指针得到的几个对象,都调用了父类中某个方法,但实际上在运行的时候,是执行的自己真实类中的方法。多态增强了软件的灵活性和重用性。2.MVC模式MVC全名是ModelViewController,是模型(model)-视图(view)-控制器(controller)的缩写。MVC是一中非常古老的设计模式,通过数据模型,控制器逻辑,视图展示将应用程序进行逻辑划分。优势:使系统层次清晰,职责分明,易于维护敏捷原则:对扩展开放-对修改封闭开放封闭原则是面向对象原则的核心,思想为:软件实体应该是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。1.对扩展开放,意味着有新的需求变化时,可以对现有的代码进行扩展,以适应新的情况。2.对修改封闭,意味着一旦设计完成,就可以独立完成其工作,而不要对类有任何的修改。实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。model与view之间是不能直接通信!模型-视图-控制器模式。MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。MVC分层有助于管理复杂的应用程序。MVC模式的应用程序耦合性很低,重用性很高,适合多人共同开发的大型项目。MVC就是用控制器把model与view隔开,也就是model与view之间没有任何交互,是控制器与model、控制器与view之间交互。model用于封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算。view是用户能够看到所有的界面上的view。controller是在应用程序的一个或多个视图对象和一个或多个模型对象之间,充当媒介。MVC缺点没有明确的定义,分层的时候,有些需要好好考虑。不适合小型项目,因为创建MVC需要花费一定的时间;并且分层之后,会增加结构的复杂性,可能产生过多新的操作,降低运行效率。视图与控制器之间紧密联系,会妨碍他们独立重用;因为视图与模型之间不能直接交互,因此需要多次调用控制器交互,这样视图与模型数据的访问效率比较低。3.单例模式Singleton单例设计模式是IOS开发中一种很重要很常用的一种设计模式。确保程序运行期某个类,只有一份实例,用于进行资源共享控制。也就是,无论请求多少次,始终返回一个实例,也就是一个类只有一个实例。优势:使用简单,延时求值,易于跨模块敏捷原则:单一职责原则(单一功能原则)实例:NSUserDefaults[UIApplicationsharedApplication]等注意事项:确保使用者只能通过getInstance方法才能获得,单例类的唯一实例。单例代码:单例的创建分Non-ARC(非ARC)和ARC+GCD,后者现在用的比较广泛,它保证了线程的安全,满足了静态分析器的要求,还兼容了ARC,代码如下:+(AccountManager*)sharedManager{staticAccountManager*sharedAccountManagerInstance=nil;staticdispatch_once_tpredicate;dispatch_once(&predicate,^{sharedAccountManagerInstance=[[selfalloc]init];});returnsharedAccountManagerInstance;}代码分析:通过这个类方法,可以得到当前类的单例对象。在方法中先声明了一个实例,并初始化为nil,前面的static关键字可以保证只执行一次为nil的操作。dispatch_once_t是多线程中的,保证只执行一次。dispatch_once这个函数用于检查该代码块是否已经被调用过,通过它不仅可以保证块里面初始化的代码仅被运行一次,还能保证线程的安全。4.工厂模式factorypattern工厂模式是一种很常用的实例化对象的模式。抽象出一个工厂类专门来实例化对象,被实例化的对象类继承自工厂类。也就是在实例化对象的时候,通过工厂方法代替new或者alloc、init方法。优势:易于替换,面向对象的编程敏捷原则:开放--封闭原则工厂模式优缺点优点:简单工厂模式的优点是客户端可以直接消费产品,而不必关心具体产品的实现,消除了客户端直接创建产品对象的责任,实现了对责任的分割。缺点是工厂类几种了所有产品的创建逻辑,一旦不能正常工作,整个系统都会受到影响,而且当产品类多结构复杂的时候,把所有创建工作放进一个工厂中来,回事后期程序的扩展较为困难。通过优缺点的分析,我们可以再如下场景中使用简单工厂模式:(1)工厂类负责创建的对象较少时;(2)客户端只知道传入工厂类的参数,对于如何创建对象的逻辑不必关心时。5.观察者模式Observer观察者模式完美的将观察者和被观察者分离开。观察者模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动刷新。在IOS开发中经典观察者模式的实现方式有:NSNotificationCenter、KVO等优势:解耦合解耦合:把原来引用很紧密的对象通过中间一层的分离,不直接引用敏捷原则:开放—封闭原则通知NSNotificationCenter:一般为model层对controller和view进行的通知方式,不关心谁去接收,只负责发布信息。通知可以是一对一,也可以是一对多。实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。kvo键-值观察机制Key-ValueObserving:当制定的对象的属性被修改后,对象就会接到通知。每次指定的被观察的对象的属性被修改后,KVO自动通知相应的观察者。键值对改变通知的观察者,极大的简化了代码。kvc键-值编码Key-ValueCoding:是一种间接访问对象的属性。使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。6.代理模式代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。应用场景:当一个类的某些功能需要由别的类实现,但是又不确定由哪个类实现,可以使用代理实现。实例:tableview、Scrollview等中的delegete…
本文标题:【4】IOS面试题--设计模型
链接地址:https://www.777doc.com/doc-2809616 .html