面试题(二)

1,为什么很多内置类如UITableViewController的delegate属性都是asssign,而不是retain的

防止循环引用:我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了

2,在一个对象的方法里面:self.name = "object" 和 name = "object" 有什么不同吗?

self.name会调用setName方法(set方法主要是对旧值),name的retainCount会加一, 后者直接赋值不会

3,如何实现深拷贝

浅拷贝:创建指针,不同的指针指向同一内存地址,一了百了, 下面的例子:str销毁的时候,str2也会变成野指针

    NSString *str = @"sad";
    NSString *str2 = str;
    NSString *str3 = [str retain];

深拷贝:copy, mutablecopy, 新创建的对象retaincount 为1

 

4,请简述一下  json,xml 的解析的原理

http://blog.csdn.net/maxdong24/article/details/43815857 讲述的比较清晰

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

XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析。DOM采用建立树形结构的方式访问XML文档,而SAX采用的事件模型。DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历。使用DOM解析器的时候需要处理整个XML文档转化为一个包含其内容的树,并可以对树进行遍历。使用DOM解析器的是时候需要处理整个XML文档,所以对性能和内存的要求比较高。SAX在解析xml文档的时候可以出发一系列的事件爱你,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展功能得到了更好的体现。

 

延伸:SAX和DOM的区别

1、SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上应用程序甚至不必解析整个文档;他可以在某个条件得到满足时停止解析。一般来说,SAX还比它的替代者DOM快许多。另一方面,由于应用程序没有以任何方式存储数据,使用SAX还比它的替代者DOM快许多。另一方面,由于应用程序没有以任何方式存储数据,使用SAX来更改数据或在数据流中往后移是不可能的。

2、DOM以及广义的基于树的处理有几个优点首先由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构做出更改。它还可以在任何时候在树中上下导航,而不像SAX那样一次性的处理。DOM使用起来简单的多。

3、选择DOM还是SAX,这取决于以下几个因素:

应用程序的目的;数据容量

4、对速度的需要:SAX实现通常要比DOM实现更快

SAX 特点

只读

从上向下

速度快

解析的时候相对比较繁琐,有5个代理方法,每个代理方法都要写一定代码

适合大的 XML 文件解析

mac 中可以使用 doc解析, iPhone只能使用sax解析

 

5,什么是简便构造方法

简便构造方法一般由CocoaTouch框架提供,如NSNumber的 + numberWithBool: + numberWithChar: + numberWithDouble: + numberWithFloat: + numberWithInt:

Foundation下大部分类均有简便构造方法,我们可以通过简便构造方法,获得系统给我们创建好的对象,并且不需要手动释放(或者可以简单的理解为类方法返回对象)

6,什么是谓词

NSPredicate, 只要我们使用谓词(NSPredicate)都需要为谓词定义谓词表达式,而这个表达式必须是一个返回BOOL的值。谓词表达式由表达式、运算符和值构成。

一般用来筛选

7,http 和 socket 通信的区别, TCP 和 UDP 的区别,session 和 cookie 的区别

8, MVC设计模式是什么?你还熟悉什么设计模式?
MVC:Model, View, Controller,

9,在项目什么时候使用 GCD,什么时候使用 NSOperation?

项目中应用NSOperation的长处是NSOperation是对线程的高度抽象,在项目中应用它,会使项目标法式构造更好,子类化NSOperation的设计思绪,是具有面向工具的长处(复用、封装),使得实现是多线程支撑,而接口简朴,建议在庞大项目中应用。

项目中应用GCD的长处是GCD自己很是简朴、易用,对于不庞大的多线程操作,会节约代码量,而Block参数的应用,会是代码更为易读,建议在简朴项目中应用。

10,什么是block ,block实现原理

block:可以理解为匿名的函数,就是预先准备好的一段代码,在需要的时候调用。

Block和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样。

 

11,什么是 NSManagedObject 模型?

12,谈谈你对响应链的理解

13,什么时候用 delegate ,什么时候用 Notification ,什么时候用KVO

14,obj-c 有多重继承么?不是的话,有什么替代方法

15,列举几种进程的同步机制,并比较其优缺点,什么情况下会造成死锁

16,是否使用过 CoreAnimation 和 CoreGraphics 。UI 框架和 CA,CG 的关系是什么,分别用 CA 和 CG 做过些什么动画或者图像上的内容

17,什么是键值,键路径是什么

18,我们说的 oc 是动态运行时语言是什么意思

原文地址:https://www.cnblogs.com/shidaying/p/4989222.html