面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
类别的作用?继承和类别在实现中有何区别?
答案: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从英语单词大致可以看出,单一拥有和可控制的对应关系。
答案:这个问题其实浅涉及到两个概念,运行时和多态。简单来说。
运行时机制: 使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。(有点像工厂方法)
多态: 主要是将数据类型的确定由编译时,推迟到了运行时,不同对象以自己的方式响应相同的消息的能力叫做多态。
意思就是假设生物类( 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 ,而不是对象)。
Provider 是指某个 iPhone 软件的 Push 服务器,这篇文章我将使用 .net 作为 Provider 。
APNS 是 Apple Push Notification Service ( Apple Push 服务器)的缩写,是苹果的服务器。
上图可以分为三个阶段。
第一阶段: .net 应用程序把要发送的消息、目的 iPhone 的标识打包,发给 APNS 。
第二阶段: APNS 在自身的已注册 Push 服务的 iPhone 列表中,查找有相应标识的 iPhone ,并把消息发到 iPhone 。
第三阶段: iPhone 把发来的消息传递给相应的应用程序,并且按照设定弹出 Push 通知。
http://blog.csdn.net/zhuqilin0/article/details/6527113 // 消息推送机制
看内存泄露时候:在搜索中搜索 run 找到 Run Static Snalyzer .
20.一个objc对象的isa的指针指向什么?有什么作用?
指向他的类对象:从而可以找到对象上的方法
24. objc中的类方法和实例方法有什么本质区别和联系?
类方法:
实例方法:
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协议和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协议的抽象,从而形成了我们知道的一些最基本的函数接口。