OC相关资料

来源:互联网 发布:php 页面重定向方法 编辑:程序博客网 时间:2024/05/19 14:50

1.你如何理解OC这门语言的?你谈一下你对OC的理解?
OC语言是C语言的一个超集,只是在C的基础上加上了面向对象的语言特性,如:封装,继承,多态。
OC语言优点:1.支持类别 2.可与C++混编
OC相比C++相比:1.不支持命名空间 2.不支持运算符重载 3.不支持多继承

2.C与OC如何混用,C++与OC如何混用?
实现文件的扩展名.m改成.mm即可,但cpp文件必须只能使用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只能写C++的代码

3.OC的消息机制你知道不知道?

如果记不住下面的理解,只需回答,系统内部是靠objc_msgSend来实现方法调用的

在OC中,message与方法的真正实现是:

在执行阶段绑定的,而非编译阶段
编译器会将消息发送转换成objc_msgSend方法的调用。

objc_megSend方法含两个必要参数:receiver,方法名(即:selector)。 如:【receiver message】;将转换为:objc_mesSend(receiver selector); objc_msgSend方法也能hold住message的参数,如:objc_msgSend(receiver,selector,arg1,arg2,…);
objc_msgSend
方法会按照顺序以下操作,以完成动态绑定:查找selector所指代的程序(方法的真正实现)。 因为不同类对同一方法有不同的实现,所以

对方法的真正实现的查找依赖于receiver的类调用该实现,并将一系列参数传递过去将该实现的返回值作为自己的返回值,返回值消息传递的关键是:编译器构建每个类和对象所采用的数据结构每个类都包含以下两个必要元素:一个指向父类的指针
一个调度表(dispatch table)

。 该调度表将类的selector与方法的实际内存地址关联起来。每个对象都有一个指向所属类的指针isa。通过该指针,对象可以找到他所属的类,也就招待了其全部父类。

4.OC的事件响应者链
响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)。 一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由其他处理,如果他不处理,事件就会被传递给它的视图控制器对象(如果存在)。然后是他的父视图(superview)对象(如果存在),以此类推,直到顶层视图。接下来会沿着顶层视图(top View)到窗口(UIWindow对象)再到程序(UIApplication对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。但有时候可以试图的响应方法中根据一些判断条件来决定是否需要继续传递事件。

5.我们说OC是动态运行时语言是什么意思?

多态。主要是将数据类型的确定由编译时,推迟到了运行时。
运行时机制:直到运行时才决定一个对象的类别,以及调用该类别对象制定方法。
多态:不同对象以自己的方式响应相同消息的能力。

6.OC语言的优缺点

优点:类目,动态识别,支持C语言,OC与C++可以混编
缺点:不支持命名空间,不支持运算符重载,不支持多重继承

7.OC中有私有方法?私有变量吗?

1.使用private修饰的全局变量是私有的变量

2.OC在语法上没有设计私有方法,但可以通过延展在实现文件里定义方法作为私有方法,但不是真正意义上的私有方法,可以调用,只是外部不可见而已。

8.OC中有无多重继承,如何实现多重继承?

1.没有多重继承
2.cocoa中所有的类都是NSObject的子类,多继承在这里使用protocl委托代理来实现的
3.面向对象语言大部分都是单继承,如:java,c#
4.C++是支持多继承的

9.OC可以实现多个接口么?Category是什么?重写一个类的方法用继承好还是分类好,为什么?

  1. OC不支持多重继承,可以实现多个接口,通过实现多个接口可以完成C++的多重继承
  2. Category是类别
  3. 一般情况使用分类号,用类别去重写类的方法,仅对本类别有效,不会影响到其他类与原有类。

10.RunLoop
RunLoop是线程相关的基础框架的一部分,一个run loop就是一个事件处理的循环,用来不停地调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没有工作的时候处于休眠状态。

11.runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?

运行时机制,runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入<objc/message.h><objc/runtime.h>

• runtime,运行时机制,它是一套C语言库
• 实际上我们编写的所有OC代码,最终都是转成了runtime库的东西,比如类转成了runtime库里面的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制)
• 因此,可以说runtime是OC的底层实现,是OC的幕后执行者
• 有了runtime库,能做什么事情呢?runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等
• 因此,有了runtime,想怎么改就怎么改

0 0