资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
iPhone 开发试题学 院: 专 业: 班 级: 姓 名: 学 号: 2014 年 5 月 5 日(说明:1 不要修改此试卷的任何格式(否则不算成绩) ,格式包括字体,行间距等。2 正文用小四号宋体,1 倍行距,打印时可删除此说明,做完后打印,一周之内交到理工试验大楼 702 嵌入式重点实验室)(一)简述 objective-C 的优缺点?(不少于 100 字)答:objective-C 也是 C 的面向对象扩展,主要使用于 Mac OS X 和 GNUstep这两个使用 OpenStep 标准的系统,而在 NeXTSTEP 和 OpenStep 中它更是基本语言。个人对此语言没有应用经验,感觉苹果和 next 电脑是使用这种语言开发的,应用范围较小。Objective-C 的最初版本并不支持垃圾回收。另一个问题是 ObjC 不包括命名空间机制(namespace mechanism)。取而代之的是程序设计师必须在其类别名称加上前缀,时常引致冲突。和 C+相比: Objective-C 不支持多重继承,(同 Java 和 Smalltalk),而 C+语言支持多重继承。Objective-C 是动态定型(dynamicaly typed)所以它的类库比 C+要容易操作。(二)简述面向对象程序设计的特点有哪些?(不少于 200 字)答:面向对象程序设计有三大特点:I 封装 封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。 在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。 II 继承 继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。例如,知更鸟属于飞鸟类,也属于鸟类。就像图 5 中描绘的那样,这种分类的原则是,每一个子类都具有父类的公共特性。III 多态 多态是 OOP 的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。 (三)什么事 MVC,MVC 是怎么工作的?(不少于 300 字)答:MVC 全名是 Model View Controller,是模型(model)视图(view)控制器(controller) 的缩写,一种软件设计典范,用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC 被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。MVC(model view controller)模型-视图- 控制器。模型封装了对数据和对数据的操作,是实际进行数据处理和计算的地方。视图是应用和用户之间的接口,它负责将应用显现给用户和显示模型的状态。控制器负责视图和模型之间的交互。MVC 本身就是一个非常复杂的系统,所以采用 MVC 实现 Web 应用时,最好选一个现成的 MVC 框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的 MVC 框架,由于 Struts 有完整的文档并且相对来讲比较简单,所以用它开发 MVC 系统还是比较方便地。它是怎样工作的呢,先通过 JS 视图层来接收信息,存入 ACTIONFROM 给予到,通过 IXX(接口)到方法,逻辑层 DAO,调用 ENTITY 类型。(四)阐述 objective-C 的内存管理?(不少于 300 字)答:iPhone 系统中的 Objective-C 的内存管理机制是比较灵活的,即可以拿来像 C/C+一样用,也可以加个 AutoreleasePool 让它升级为半自动化的内存管理语言。当然,也不能拿 JAVA 虚拟机中的全自动化 GC 来比!一,引用计数是实例对象的内存回收唯一参考引用计数(retainCount)是 Objective-C 管理对象引用的唯一依据。调用实例的release 方法后,此属性减一,减到为零时对象的 dealloc 方法被自动调用,进行内存回收操作,也就是说我们永不该手动调用对象的 dealloc 方法。它的内存管理老简单老简单了,下面就是它主要操作接口:1,alloc, allocWithZone,new(带初始化)为对象分配内存,retainCount 为“1”,并返回此实例2,releaseretainCount 减“1”,减到“0”时调用此对象的 dealloc 方法3,retainretainCount 加“1”4,copy,mutableCopy复制一个实例,retainCount 数为“1”,返回此实例。所得到的对象是与其它上下文无关的,独立的对象(干净对象)。5,autorelease在当前上下文的 AutoreleasePool 栈顶的 autoreleasePool 实例添加此对象,由于它的引入使 Objective-C(非 GC 管理环境)由全手动内存管理上升到半自动化。二,Objective-C 内存管理准则我们可以把上面的接口按对 retainCount 的操作性质归为两类,类是加一操作:1,3,4类是减一操作:2,5(延时释放)内存管理准则如下:1,A 与类的调用次数保持一制2,为了很好的保障准则一,以实例对象为单位,谁 A 了就谁,没有第二者参与三,对象的拥有者面向对象领域里有个引用的概念,区别于继承,引用常被用来当做偶合性更小的设计。继承是强依赖。我们要降偶软件的设计,就要尽量减少对它的使用。但没有任何偶合的模块或功能是没有用的,那我们只能多用引用了吧。一个实例拥有另一个实例的时候,我们称它为引用了另一个实例。另外一个比较容易忽略而又比较经典的问题是实例变量的循环引用,Objective-C 为此区分了,其实也相当的简单:1,强引用,上面讲的就是强引用,存在 retainCount 加一。2,弱引用,但凡是 assign 声明并直接用指针赋值实现的被称之为弱引用,不存在 retainCount 加一的情况。四,AutoreleasePool 使 Objective-C 成为内存管理半自动化语言。(五)什么自动释放池,它是如何工作的?(不少于 200 字)答:当您向一个对象发送一个 autorelease 消息时,java 觉得 Cocoa 就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放当您向一个对象发送一个 autorelease 消息时,java 觉得 Cocoa 就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位臵时,自动释放池就会被释放,池中的所有对象也就被释放。当使用 Foundation 框架中的类来做更多程序处理工作时,需要一个更有弹性的内存管理机制,也就是要使用内存释放池(Autorelease pool) 。内存释放池提供了一个对象容器,每次对象发送 autorelease 消息时,对象的引用计数并不真正变化,而是向内存释放池中添加一条记录,记下对象的这种要求。直到当内存释放池发送 drain 或 release 消息时,即当池被销毁前会通知池中的所有对象,全部发送 release 消息才会真正将引用计数减少。简单说内存释放池可以自动管理对象释放问题,这些语句必须要放在下面语句之间,直到池被释放,一个对象要想纳入内存释放池对象,必须要发送autorelease。(六)#import 与#include 的区别是什么?答:除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题 class 一般用于头文件中需要声明该类的某个实例变量的时候用到,在 m 文件中还是需要使用#import class 就是告诉编译器有这么一个类,至于类的定义是啥不知道 class 一般用于头文件中需要声明该类的某个实例变量的时候用到,在 m 文件中还是需要使用#import import是相对的一个是自己创建的文件一个是系统的文件(七)简述 assign、retain 和 copy 的区别?答: copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象。 assign: 简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变。 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为 1。Copy 其实是建立了一个相同的对象,而 retain 不是 :比如一个 NSString 对象,地址为 01111,内容为”ABC”Copy 到另外一个 NSString 之 后,地址为 02222,内容相同,新的对象 retain 为 1, 旧有对象没有变化retain 到另外一个 NSString 之 后,地址相同(建立一个指针 ,指针拷贝),内容当然相 同,这个对象的 retain 值+1assign 地址还是 0x1111,内容也还是 “ABC”。也就是说,retain 是指针拷贝,copy 是内容拷贝。 (八)IOS 开发中有哪些常用的组件 ?答:下面是几个 Iphone 开发 ISO 常用的开源组件:1、AFNetworkingAFNetworking 是一个开源的网络库 ,适用于 iOS 以及 Mac OS X. 它构建于在NSURLConnection, NSOperation 以及其他熟悉的 Foundation 技术之上; 它拥有良好的架构,丰富的 api,以及模块化构建方式,使用起来非常方便。2、EGORefreshTableHeaderViewEGORefreshTableHeaderView 是一个实现向下拉刷新列表的组件(现在非常流行,IOS、Android 上很多应用都在用这个东东,比如:网易新闻)3、MBProgressHUDMBProgressHUD 是一个进度显示的组件4、EGOImageLoadingEGOImageLoading 是一个实现异步加载图片的组件5、GCDiscreetNotificationViewGCDiscreetNotificationView 是一个非模态化的 iOS 通知视图,可用来显示应用中的一些信息提示,而不会干挠用户的交互操作6、ALToastViewALToastView 同 GCDiscreetNotificationView 一样也可以实现信息提示,也不会干扰用户的交互操作,与 Android 中 Toast 效果相似。(九)static 关键词的作用是什么?答:static 可以修饰类的属性、代码块和方法。用 static 修饰的东西归类模板对象所有,可以直接用类名调用。 (你用实例来调用不会出错,编译器会帮你编译成用类名来调用。 )关于代码块, 如果加了 static 则只在类模板加载的时候执行一次。不加的话类模板加载的时候是不执行的, 只在创建实例的时候才执行。(十)简述苹果公司的发展历程。 (不少于 1000 字)答:一、苹果公司的诞生 1955 年 2 月 24 日,斯蒂夫乔布斯出生在美国旧金山,生母是一名年轻的未婚在校研究生,出生不久,生母就将他送给
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号