面向过程、面向对象 的区别? 

 
面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 
 
 
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。


类别的作用?继承和类别在实现中有何区别?
答案:category:可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除或者修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:
 (1)将类的实现分散到多个不同文件或多个不同框架中。
 (2)创建对私有方法的前向引用。
 (3)向对象添加非正式协议。
  继承:可以增加,修改或者删除方法,并且可以增加属性。

类别和类扩展的区别
  答案:category和extensions的不同在于后者可以添加属性。另外后者添加的方法是必须要实现的。
   extensions可以认为是一个私有的Category。

类别的作用
类别主要有3个作用:
 (1)将类的实现分散到多个不同文件或多个不同框架中。
 (2)创建对私有方法的前向引用。
 (3)向对象添加非正式协议。
类别有两方面的局限性:
 (1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。( 无法添加实例变量的局限,可以使用字典对象解决 )
 (2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。

代理的作用?What is purpose of delegates?
答案:代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。
   可以减少框架复杂度。
另外一点,代理可以理解为java中的回调监听机制的一种类似。

什么时候用delegate,什么时候用Notification? 
 答:delegate针对one-to-one关系,并且reciever可以返回值给sender,notification可以针对one-to-one/many/none,reciever无法返回值给sender.所以,delegate用于sender希望接受到reciever的某个功能反馈值,notification用于通知多个object某个事件。
协议有控制链(has-a)的关系,通知没有。
 因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。
 
我们说的 
 oc 
 是动态运行时语言是什么意思? 
 When we call objective c is runtime language what does it mean?
 
 答案:这个问题其实浅涉及到两个概念,运行时和多态。简单来说。 
 
 
 运行时机制: 
 使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。(有点像工厂方法) 
 
 
 多态: 
 主要是将数据类型的确定由编译时,推迟到了运行时,不同对象以自己的方式响应相同的消息的能力叫做多态。
 意思就是假设生物类( 
 life 
 )都用有一个相同的方法 
 -eat;
 
 那人类属于生物,猪也属于生物,都继承了 
 life 
 后,实现各自的 
 eat 
 ,但是调用是我们只需调用各自的 
 eat 
 方法。 
 
 
 也就是不同的对象以自己的方式响应了相同的消息(响应了 
 eat 
 这个选择器)。 
 
 
 因此也可以说,运行时机制是多态的基础? 
 
 
 
 关于多态性: 
 Polymorphism 
 ? 
 
 
 答案:多态,子类指针可以赋值给父类。 
 

 
 
 
 说说响应链  
 What is responder chain?
 
 答案:事件响应链。包括点击事件,画面刷新事件等。在视图栈内从上至下,或者从下之上传播。 
 
 
 可以说点事件的分发,传递以及处理。具体可以去看下 
 touch 
 事件这块。因为问的太抽象化了 
 
 
 严重怀疑题目出到越后面就越笼统。 
 

 
 frame 
 和 
 bounds 
 有什么不同? 
 Difference between frame and bounds?
 
 答案 
 :frame 
 指的是:该 
 view 
 在父 
 view 
 坐标系统中的位置和大小。(参照点是父亲的坐标系统) 
 
 bounds 
 指的是:该 
 view 
 在本身坐标系统中 
 的位置和大小。(参照点是本身坐标系统) 
 
 
 
 
 方法和选择器有何不同? 
 Difference between method and selector?
 
 答案: 
 selector 
 是一个方法的名称, 
 method 
 是一个组合体,包含了方法的名称和实现 
 .
 
 
 
 NSOperation queue?
 
 答案:存放 
 NSOperation 
 的集合类。 
 
 
 操作和操作队列,基本可以看成 
 java 
 中的线程和线程池的概念。用于处理 
 ios 
 多线程开发的问题。 
 
 
 网上部分资料提到一点是,虽然是 
 queue 
 ,但是却并不是带有队列的概念,放入的操作并非是按照严格的先进现出。 
 
 
 这边又有个疑点是,对于队列来说,先进先出的概念是 
 Afunc 
 添加进队列, 
 Bfunc 
 紧跟着也进入队列, 
 Afunc 
 先执行这个是必然的, 
 
 
 但是 
 Bfunc 
 是等 
 Afunc 
 完全操作完以后, 
 B 
 才开始启动并且执行(有多个窗口、或多个MAT机),因此队列的概念离乱上有点违背了多线程处理这个概念。 
 
 
 但是转念一想其实可以参考银行的取票和叫号系统。 
 
 
 因此对于 
 A 
 比 
 B 
 先排队取票但是 
 B 
 率先执行完操作,我们亦然可以感性认为这还是一个队列。 
 
 
 但是后来看到一票关于这操作队列话题的文章,其中有一句提到 
 
 “ 
 因为两个操作提交的时间间隔很近,线程池中的线程,谁先启动是不定的。 
 ” 
 (这句话是错误的,先来先启动,但是谁先执行完是不一定的) 
 
 
 瞬间觉得这个 
 queue 
 名字有点忽悠人了,还不如 
 pool~
 
 综合一点,我们知道他可以比较大的用处在于可以帮组多线程编程就好了。 
 


 
 id 
 、 
 nil 
 代表什么? 
 
 
 id 
 和 
 void * 
 并非完全一样。在上面的代码中, 
 id 
 是指向 
 struct objc_object 
 的一个指针,这个意思基本上是说, 
 id 
 是一个指向任何一个继承了 
 Object 
 (或者 
 NSObject 
 )类的对象。需要注意的是 
 id 
 是一个指针,所以你在使用 
 id 
 的时候不需要加星号。比如 
 id foo=nil 
 定义了一个 
 nil 
 指针,这个指针指向 
 NSObject 
 的一个任意子类。而 
 id *foo=nil 
 则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向 
 NSObject 
 的一个子类。 
 
 nil 
 和 
 C 
 语言的 
 NULL 
 相同,在 
 objc/objc.h 
 中定义。 
 nil 
 表示一个 
 Objctive-C 
 对象,这个对象的指针指向空(没有东西就是空)。 
 
 
 首字母大写的 
 Nil 
 和 
 nil 
 有一点不一样, 
 Nil 
 定义一个指向空的类(是 
 Class 
 ,而不是对象)。 
nil 
 用来给对象赋值( 
 Objective-C 
 中的任何对象都属于 
 id 
 类型), 
 NULL 
 则给任何指针赋值, 
 NULL 
 和 
 nil 
 不能互换, 
 Nil 
 用于类指针赋值(在 
 Objective-C 
 中类是一个类), 
 而 
 NSNull 
 则用于集合操作,虽然它们表示的都是空值,但使用的场合完全不同。
 
nil 
 : ( 
 空 
 对象:对象指针为空) 
   
 表示一个对象的指针指向空 
  NSURL 
  *url = 
  nil 
 ;
 
Nil 
 :(空类:类指针为空)       
   
 Class  class = 
 Nil 
 ;
 
NULL 
 :(空指针) 
 则给任何指针赋值  
 int 
 *pointerInt = 
 NULL 
 ; 
 NSString 
 * str = 
 NULL 
 ;
 
NSNull (空集合)则用于集合操作
 
// nil 
 是一个对象指针为空, 
 Nil 
 是一个类指针为空, 
 NULL 
 是基本数据类型为空。
 
NSNull  
对于像 
NSArray 
这样的类型, 
nil 
或 
NULL 
不能做为加到其中的 
Object 
,如果定义了一个 
NSArray 
,为其分配了内存,又想设置其中的内容为空,则可以用 
[NSNULL null 
】返回的对象来初始化 
NSArray 
中的内容 

 


 
Provider 
是指某个 
iPhone 
软件的 
Push 
服务器,这篇文章我将使用 
.net 
作为 
Provider 
。 
 
 

 APNS 
是 
Apple Push Notification Service 
( 
Apple Push 
服务器)的缩写,是苹果的服务器。 

 
上图可以分为三个阶段。 

 
第一阶段: 
.net 
应用程序把要发送的消息、目的 
iPhone 
的标识打包,发给 
APNS 
。 
 
 
第二阶段: 
APNS 
在自身的已注册 
Push 
服务的 
iPhone 
列表中,查找有相应标识的 
iPhone 
,并把消息发到 
iPhone 
。 
 
 
第三阶段: 
iPhone 
把发来的消息传递给相应的应用程序,并且按照设定弹出 
Push 
通知。 

    // 
消息推送机制 

 
看内存泄露时候:在搜索中搜索 
run 
找到 
Run Static Snalyzer .


20.一个objc对象的isa的指针指向什么?有什么作用?
指向他的类对象:从而可以找到对象上的方法

24. objc中的类方法和实例方法有什么本质区别和联系?
类方法: 
1.是属于类对象的
 
2.只能通过类对象调用
 
3.类方法中的 
self 
是类对象 
4.可以调用其他的类方法
 
5.不能访问成员变量
 
6.不定直接调用对象方法
 

 
实例方法: 
1.是属于实例对象的
 
2只能通.过实例对象调用
 
3.实例方法中的 
self 
是实例对象 
4.可以访问成员变量
 
5.可以直接调用实例方法
 
6.也可以调用类方法 
 ( 
 通过类名 
 )
 

 
 华为
1、局部变量能否和全局变量重名?
           答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
           局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而
           不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变
           量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那
           个循环体内
 2、如何引用一个已经定义过的全局变量?
           答:extern
           可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个
           在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你
           用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
           答:可以在不同的C文件中声明同名的全局变量,以static形式来声明,前提是其中只能有一个C文件中对此变量赋初值,
 此时连接不会出错
4、语句for(;1;)有什么问题?它是什么意思?
           答:和while(1)相同。
5、do……while和while……do有什么区别?
           答:前一个循环一遍再判断,后一个判断以后再循环

试题2:以下为Windows NT下的32位C++程序,请计算sizeof的值
 void Func ( char str[100] )
 {
 sizeof( str ) = ?
 }
 void *p = malloc( 100 );
 sizeof ( p ) = ?
  解答:
 sizeof( str ) = 4
 sizeof ( p ) = 4
  剖析:
  Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。

数组名的本质如下:
(1)数组名指代一种数据结构,这种数据结构就是数组;
  例如:
 char str[10];
 cout<<sizeof(str)<<endl;
  输出结果为10,str指代数据结构char[10]
(2)数组名可以转换为:指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改;
 char str[10];
 str++; //编译出错,提示str不是左值 
(3)数组名作为函数形参时,沦为普通指针。
  Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str )、sizeof ( p )都为4。

 试题3:写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。另外,当你写下面的代码时会发生什么事?
 least = MIN(*p++, b);

 解答:
 #define MIN(A,B) ((A) <= (B) ? (A) : (B))
 MIN(*p++, b)会产生宏的副作用


对MIN(*p++, b)的作用结果是:
 ((*p++) <= (b) ? (*p++) : (*p++))
  这个表达式会产生副作用,指针p会作三次++自增操作。

 
  
  
 
 
 




可扩展标记语言 
extensible markup language;XML
 
2.用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
 3,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是存储数据。
 4.XML与HTML的设计区别是:XML的核心是数据,其重点是数据的内容。而HTML被设计用来显示数据,其重点是数据的显示。
 5.XML和HTML语法区别:HTML的标记不是所有的都需要成对出现,XML则要求所有的标记必须成对出现;HTML标记不区分大小写,XML则大小敏感,即区分大小写。 

  
 
结合 

 
   
XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows,Mac OS,Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
  XML去掉了之前令许多开发人员头疼的SGML(标准通用标记语言)的随意语法。在XML中,采用了如下的语法:
  1任何的起始标签都必须有一个结束标签。
  2可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如<tag/ >。XML解析器会将其翻译成<tag></tag>。
  3标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is asamplestring。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。
  4所有的特性都必须有值。
  5所有的特性都必须在值的周围加上双引号。 

 


HTTP协议详解
HTT:P是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中。
  http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。
 HTTP协议的主要特点可概括如下:
 1.支持客户/服务器模式。
 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。
     每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
 3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
 4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
     采用这种方式可以节省传输时间。
 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


TCP/UDP区别联系
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快  
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,
 
我们来看看这三次对话的简单过程:
 
1.主机A向主机B发出连接请求数据包;
 
2.主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包;
 
3.主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。
 
三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。 
 
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!  UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。 
 tcp协议和udp协议的差别 
是否连接面向连接面向非连接 
传输可靠性可靠不可靠 
应用场合传输大量数据少量数据 
速度慢快 

 
socket 
 连接、 
 http 
 连接的区别
 
简单说,你浏览的网页(网址以http://开头)都是http协议传输到你的浏览器的,而http是基于socket之上的。socket是一套完成tcp,udp协议的接口。
HTTP协议:简单对象访问协议,对应于应用层  ,HTTP协议是基于TCP连接的
 tcp协议:   对应于传输层
 ip协议:    对应于网络层
 TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。 

Socket: 
是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
 http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;
 socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的
我们已经知道网络中的进程是通过socket来通信的,那什么是socket呢?socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –>读写write/read –>关闭close”模式来操作。我的理解就是Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭),这些函数我们在后面进行介绍。我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。
 1)Socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层 。
  而http是个应用层的协议,它实际上也建立在TCP协议之上。 
  (HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。)
  2)Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口。