面向过程、面向对象 的区别?
面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象:是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
类别的作用?继承和类别在实现中有何区别?
答案: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协议的抽象,从而形成了我们知道的一些最基本的函数接口。
IOS 继承于xib ios继承和类别的区别
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python多态继承
python继承
构造函数 多重继承 Python