iOS面试题四

1.简述你对UIView、UIWindow和CALayer的理解

UIView:属于UIkit.framework框架,负责渲染矩形区域的内容,为矩形区域添加动画,响应区域的触摸事

件,布局和管理一个或多个子视图

UIWindow:属于UIKit.framework框架,是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面。UIWindow在程序中主要起到三个作用:

1、作为容器,包含app所要显示的所有视图2、传递触摸消息到程序中view和其他对象3、与

UIViewController协同工作,方便完成设备方向旋转的支持

CAlayer:属于QuartzCore.framework,是用来绘制内容的,对内容进行动画处理依赖与UIView来进行显示,不能处 理用户事件。UIView和CALayer是相互依赖的,UIView依赖CALayer提供内容,CALayer依赖UIView一共容器显示 绘制内容。

UIViewController:管理视图的几成熟,每个视图控制器都有一个自带的视图,并且负责这个视图相关的一切事务。方便 管理视图中的子视图,负责model与view的通信;检测设备旋转以及内存警告;是所有视图控制类的积累,定义了控制器 的基本功能

2. 写一个完整的代理,包括声明,实现

(略)

3.分析json、xml的区别?json、xml解析方式的底层是如何处理的?

简言之:

json数据小,易解析,不复杂    xml数据较大,比较复杂

json中以key/value形式保存,大多数是字典数组模式

xml中则是<> 节点

详细来说:

(1)可读性方面:基本相同,xml的可读性比较好

(2)可扩展性方面:都具有很好的扩展性

(3)编码难度方面:相对而言:JSON的编码比较容易

(4)解码难度:json的解码难度基本为零,xml需要考虑子节点和父节点

(5)数据体积方面:json相对于xml来讲,数据体积小,传递的速度跟快些

(6)数据交互方面:json与JavaScript的交互更加方面,更容易解析处理,更好的数据交互

(7)数据描述方面:xml对数据描述性比较好(8)传输速度方面:json的速度远远快于xml

JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号, : 号 等进行区分,{}号是一个字典 的开始,[]号是一个数组的开始, : 号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数 组,或字符串而已。

XML底层原理: XML解析常用的解析方法有两种:DOM解析和SAX解析。

DOM 采用建立树形结构的方式访问 XML 文档,而 SAX 采用的事件模型。

DOM 解析把 XML 文档转化为一个包含其内容的树,并可以对树进行遍历。使用 DOM 解析器的时候需 要处理整个 XML 文档,所以对性能和内存的要求比较高。

SAX在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag 的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发人员自己来决 定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。

4. ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默认的操作是什么?

1)当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,程序收到内存警告时候ViewController会调用didReceiveMemoryWarning这个方法。

2)调用了这个方法之后,对view进行释放并且调用viewDidUnload方法

3)从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。

5.面向对象的三大特征,并作简单的介绍

封装、继承、多态

封装:将一个实例的所有属性封装到某个类中

继承:子类继承父类所有方法和属性

多态:父类指针指向子类对象

6. 简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?

NotificationCenter:任何对象可以发送通知到中心,同时任何对象可以监听中心的通知。

优点: 通知的发送者和接受者都不需要知道对方。可以指定接收通知的具体方法。通知名可以是任何字符串。

缺点: 较键值观察需要多点代码。在删掉前必须移除监听者。不能传大量数值,只能让谁去做什么事。

KVC,即是指 NSKeyValueCoding,键值编码。提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问

KVO的是KeyValue Observe的缩写,键值观察。这是一个典型的观察者模式,观察者在键值改变时会得到通知。

Delegate:多用于两个类之间的传值,效率比NSNotification高

7.懒加载

又称延迟加载,按需加载。

只在用到的时候才去初始化

8. 什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?

协议,用来在两个ViewController交互时所定的协议。

代理,第三方中介

weak 或者 assign ,防止循环引用

9.分别描述类目(categories)和延展(extensions)是什么?以及两者的区别?继承和类目的实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?

类目:主要作是为没有源代码的类添加法 。通过Category添加的法会成为原类的部分。从达到扩展个类的功能。

延展:主要作是给某类添加私有方法或是私有变量,延展可以认为是一个私有的类目。

两个的区别:延展可以添加属性并且它添加的方法是必须要实现的。

继承和类别在实现中的区别:类别可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

Category只能为对象添加方法,却不能添加成员变量的原因:如果可以添加成员变量,添加的成员变量没有办法初始化----这是语言规则

时间: 2024-08-28 21:30:37

iOS面试题四的相关文章

iOS 面试题:OC基本概念题

1.什么是类和对象? 类是一组具有同样特征和功能的事物的抽象 对象描写叙述了一个物体的特征和行为实现 类是对象的抽象 对象是类的实例 2.OC中定义类,创建对象,使用对象. OC中定义类分为接口部分,实现部分 接口部分:对外声明类的特征和行为 实现部分:实现方法,即类的行为实现 创建对象须要进行分配内存空间和初始 3.声明方法,依据需求.区分:方法声明,方法实现,方法运行 4.继承.继承的全部特点 子类能够继承父类全部的声明的方法和除私有的以外实例变量 父类不能使用子类所创建的方法和实例变量 5

超全!iOS 面试题汇总

超全!iOS 面试题汇总 2015-10-20 CocoaChina 作者:Job_Yang 之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和重排,现在分享给大家.(题目来源于网络,侵删) 1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好

iOS 面试题:OC基本概念题&lt;续&gt;

第一,怎么确定一个方法的方法名 去掉减号,加号,去掉返回值,去掉参数类型,去掉参数,剩下的就是方法名了 第二,id指向任何对象类型,可以用assign,copy,retain,根据需要使用 第三,autorelease 在什么时候释放? 在碰到autoreleasepool的时候释放(可以把好几个相同的变量放几个不同的池里) 第四,协议的方法默认是@required 第五,字典集合的特点? 字典是以键值对形式的保存元素 只能存储对象,不能存储基本数据类型 第六,如何定义一个类? 类的接口部分包含

iOS 笔试题-1

ios笔试题 有一篇面试题总结文章:http://www.onmoso.com/ios/356.html 原文地址:http://www.cnblogs.com/jiangshiyong/archive/2012/08/27/2657862.html 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义UI控件,使用类别扩展系统控件功能; 擅长通讯技术,熟悉各种通信协议,精通xml, json, 二进制或其他形式的自定义解析,能架设服务器实现客户端与服务

iOS面试题,希望给面试的同学一点帮助。

iOS基础面试题 1.用objective-c写一个插入法排序 2.写一个NSString类的实现 + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding{ NSString *

2019最新iOS面试题及答案

1. Object-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-C的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. import 跟#include 又什么区别,@class呢, #import<> 跟 #import"&qu

最全的iOS面试题及答案-转载

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现多个接口可以完成C++的多重继承:Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

iOS面试题之加载单张图片到底会不会崩溃?

今天,一哥们去某公司面试iOS职位.其中一道题目问,加载一张图片,到底会不会崩溃呢? 我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的... 这问题,加载本地的怎么会崩溃呢?写这么久加载图片也没遇到如此问题. =================================================== 原来,iPhone毕竟是手持设备,它所占有的内存是有限的,当图片过大的时候会引起内存导致的崩溃现象. 后来,我又查了下,发现,原来还有这么大学

iOS面试题 第一天

今天上午,下午分别面试了两家公司.上午是一家互联网公司,气氛还比较好,是我比较喜欢的.技术这块是直接机试,主要是给了些BUG让我修复,整个过程还算顺利.下午去了一家大型的证券公司.整理技术问题如下: 1. UIView的生命周期是什么样的,执行顺序是怎么样的?init -- loadView -- viewDidLoad -- viewWillAppear -- viewWillDisappear -- viewDidUnload -- dealloc. 2. UIViewController在