Object-C runtime programming guide学习笔记

Messaging

向一个实例发消息,runtime使用的是objc_msgSend函数来发送的。

每一个class都有一个指针指向他的super class,有一个 dispatch table,指向每个方法的地址。

每一个实例(来自NSObject or NSProxy)都有一个指针isa,指向他的class.

runtime通过向上回溯直到找到调用的方法,然后执行。

执行的方法中会传入两个隐藏参数

self:  message receiver

_cmd: 当前方法的selector

动态添加一个方法

resolveInstanceMethod可以动态添加实例方法,resolveClassMethod可以动态添加类方法

动态加载

NSBundle

消息转发

如果实现了forwardInvocation, 则当想对象发送一个不存在的消息时候,会调用此接口,可以在这里将消息转发到其他对象来处理。

时间: 2024-11-12 15:30:20

Object-C runtime programming guide学习笔记的相关文章

UIView Programming Guide学习笔记

View Creating and Configuring View Objects Creating View Objects Using Interface Builder 用Interface Builder就是大家熟知的用StoryBoard进行页面的创建,这里就不多讲了.主要是用StoryBoard进行UI的实现还是用Programatic的方法好呢,需要以后的继续研究. Creating View Objects Programmatically 默认的View的初始化函数是init

Objective-C Runtime Programming Guide 中文翻译

介绍 Objective-C将许多决策从便宜时期和链接时期延后到运行时期.只要可能,它都动态的做很多事情.这意味着它不仅需要一个编译器,还需要一个运行时系统来执行编译好的代码.对于Objective-C来说,这个运行时系统就好像一个操作系统,使objective-c能够正常工作. 本文探究NSObject类,以及Objective-C程序如何和运行时系统交互. 通过阅读本文,你应该理解Objective-C的运行时系统如何工作,以及如何利用它.尽管对于写一个Cocoa程序而言,你可能并不需要理解

The C++ Programming Language 学习笔记 第5章 指针、数组和结构

1.关于输出指向字符的指针的值. 现在定义,char c='a',char* pc=&c.在C中,输出该值只需要printf("%p\n",pc);而在C++中,如果cout<<pc<<endl;则会出现奇怪的一串字符,怎么回事呢.由于C++标准库中I/)类对<<操作符重载,因此在遇到字符型指针时会将其当作字符串名来处理,输出指针所指的字符串.所以我们可以将其先转化为void*,再输出. cout << static_cast&l

The C++ Programming Language 学习笔记 第6章 表达式和语句

1.关于strcpy函数. 书中说c风格的字符串尽量少用,strcpy这样的函数应该也要少用.这里讲这个函数主要是要通过本章课后练习第十题来讲一下前面提及的要点.巩固一下前几章的知识.写了一段,本来感觉自己写得不错了,结果和网上的一笔感觉还是差很多,也学到了很多,下面贴上网址供大家看看.http://blog.csdn.net/cazicaquw/article/details/7044602. 里面讲得很详细,很多细节对于我们初学者来说也是很有用的.但感觉他写得太繁琐了,其实从指针到bool的

The C++ Programming Language 学习笔记 第7章 函数

1.关于内联函数(inline)      借用一下书中的例子. 1 inline int fac(int n) 2 { 3 return (n<2) ? 1:n*fac(n-1); 4 }      inline描述符给编译器一个提示,要求它试着把所有对fac()的调用在线化,也就是假如一个编译器够聪明的话,它会把对fac(6)生成常数720,然后直接代替代码中fac(6)的位置.不过这要视函数的复杂程度而言,假如递归复杂,或是有大量循环,或者代码复杂,或者并不依赖输入的内联函数(这个不知道为

The C++ Programming Language 学习笔记 第四章 类型和声明

1.关于main 函数中的 return 0 C99标准中,main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统).如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出.尽管如此有人会为了移植性在main函数后面加上return 0,这是为了照顾老版本的编译器,如vc6.0等,不过现在过了这么多年了,应该没有人会用这么老的编译器了吧(也许不一定),所以

3D Game Programming withDX11 学习笔记(一) 数学知识总结

在图形学中,数学是不可或缺的一部分,所以本书最开始的部分就是数学知识的复习.在图形学中,最常用的是矢量和矩阵,所以我根据前面三个章节的数学知识,总结一下数学知识. 一.矢量 数学中的矢量,拥有方向和长度.其实矢量和点在坐标系中的表示完全一致(笛卡尔坐标系为准),区分矢量和点的关键,我觉得就是做平移.点是不能用平移操作来保证一致的,比如点A(1,2,3)经过平移矢量(1,2,3)后就是B(2,4,6),此时就是一个新的点.但是矢量经过相同平移操作后,还是矢量(1,2,3),这是因为矢量表示的是 v

Advanced Bash-Scripting Guide(学习笔记)

http://www.tldp.org/LDP/abs/html/index.html       11.1. Loops tp://www.tldp.org/LDP/abs/html/loops1.html   for a do echo -n "$a " done   for 没有in ,直接操作[email protected]命令行参数

Sharepoint2013商务智能学习笔记之Performancepoint service 配置(九)

1)配置Performance Service服务 第一步,新建performance service.先在管理中心,系统设置区域点击管理服务器上的服务,确认Performance Service服务在需要承载的服务器上启动了.然后在管理中心,应用程序管理区域,点击管理服务器应用程序,新建Performancepoint Service 第二步,设置Performancepoint service无人值守账号 performancepoint service新建完成之后,在应用程序列表点击进入