版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Objective-C 2.0 运行时系统编程指概本部分包括如下内容Objective-C 运行时。只要有可能,Objective-C Objective-CObjective-C 2.0 运行时系统编程指概本部分包括如下内容Objective-C 运行时。只要有可能,Objective-C Objective-C 本文档的组织结 “类型编码“属参 Objective-C 2.0 程序设计语言介绍了Objective-C语言本身 运行时系统的版 本部分包含如下内容早期版本和现行版关的新特性。早期版本的编程接本部分包含如下内容早期版本和现行版关的新特性。早期版本的编程接口见Objective-C
2、 1 运行时系统参考库;现行版本的编程接口见Objective-C 2.0 运行时系统参考库。此外,现行版本支property的synthesis属性(参考Objective-C 程序设计语言的属性一节) 和运行时系统的 本部分包含如下内容 通过Objective-C源代 结构包含类定义和协议类定义中的信息,如在Objective-C 2.0 程序设计语言中定义类和协议类一节所通过类NSObject的方了NSObject的行为。(NSProxy类是个例外细节参考“消息转发”一节。)然而,某些情况GDB-object方法就是直接打印出该方法返回的字符串。NSObject实现并不知道子类中的内容,
3、所以它只是返回类的名字和对象的地址。NSObjectGDB-object方法就是直接打印出该方法返回的字符串。NSObject实现并不知道子类中的内容,所以它只是返回类的名字和对象的地址。NSObject某些NSObject的方法只是简单地从运行时系统中获得信息,从而允许对象进行一定程度的自我检查。例如,class返回对象的类;isKindOfClass:isMemberOfClass:通过运行时系统的函头文件在/usr/include/objc中。这些函数支持用纯 C 的函数来实现和 Objective-C 同样的功能。有一些函了NSObject类方法的基础。这些函数使 数是非常有用的。 这
4、些函数的文档参见Objective-C 2.0 运行时系统参考库消本章描述了代码的消息表达式如何转换为对objc_msgSend函数的调用,如何通过名字来指定一个方法,以及如何使用objc_msgSend函数。本部分包含如下内容objcmsgSend函数获得方法地利用NSObject类中的methodForSelector:下面的例子展示了怎么使用指针来调用setFilled:void(*setter)(id,SEL,BOOL); setter = (void (*)(id, SEL, BOOL) 复发送很多次时才有意义,例如上面的for循环。objc_msgSend在 复发送很多次时才有意义
5、,例如上面的for循环。objc_msgSend在 类的方法表。方法表将方法选标和该类的方法实现的地址关联起来。例如,setOrigin:法选标和setOrigin:的方法实现的地址关联,display的方法选标和display的该对象的类结构的指针,叫做isa注意:Obective-C Objective-C isa指针。对象和结构体struct objc_object(objc/objc.h中定义)必须“一致”。然而,您很少需要创建您自己的根对象,因为从NSObject或者NSProxy继承的对象都自动包括isa注意:编译器将自调用该消息函数的代码。您无须在代码中显示调用该消息函数objc
6、_msgSend(receiver,selector,arg1,arg2, receiverfor(i=0;i1000,i+3-13-该消息对应的方法选标。如果找不到,objc_msgSend3-13-该消息对应的方法选标。如果找不到,objc_msgSend将继续从父类中寻找,直到NSObject旦找到了方法选标, 使用隐藏的参量一样)。在方法中可以通过self消息接收者对象,通过选标_cmd例子中,_cmd指的是strange方法,self指的收到strange量一样)。在方法中可以通过self消息接收者对象,通过选标_cmd例子中,_cmd指的是strange方法,self指的收到str
7、ange动态方本部分包含如下内容动态方 程序设计语言中属性小节)前的修饰符您可以通过实现resolveInstanceMethod:resolveClassMethod:来动态地实现给定选标dynamic-=getTheReceiver(); SEL method = getTheMethod();if (=self|method=_cmd) return nil;returnObjective-C方法可以认为是至少有两个参数self和_cmd 的C通常消息转发(见 “消息转发”)Objective-C方法可以认为是至少有两个参数self和_cmd 的C通常消息转发(见 “消息转发”)动态加
8、模块 尽管已经有一个运行时系统的函数来动态加载Mach-O文件中的Objective-C模ion+if(aSEL=class_addMethod(selfclass,aSEL,(IMP)dynamicMethodIMP,v:); return YES;returnsupervoidself,SEL_cmd)/ion信息请参考Foundation框架中关于NSBundle类的文档。关于Mach-O文件的有关信息请参考MacOS ABI Mach-O 文件格式参考库消息转 信息请参考Foundation框架中关于NSBundle类的文档。关于Mach-O文件的有关信息请参考MacOS ABI Ma
9、ch-O 文件格式参考库消息转 本部分包含如下内容 消息转关于消息转发的作用,您可以考虑如下情景:假设,您需要设计一个能够响应negotiatenegotiate方法的实现中将negotiate消息在不同的继承体系中响应negotiate的将negotiate消息转发给其他类的对象,就好像从其它类那儿“借”来的现一样。如下所示:-if(someOtherObjectrespondsTo:selector(negotiate) return someOtherObject negotiate;returnforwardInvocation:相应的方法实现而无法响应某消息时,运行时系统将通过for
10、wardInvocation:个对象都从NObject类中继承了forwrdInvocation:方法。然而,NSObject只是简单地调用了doesNotRecognizeSelector:。通过实现您自己的forwardInvocation:forwardInvocation:相应的方法实现而无法响应某消息时,运行时系统将通过forwardInvocation:个对象都从NObject类中继承了forwrdInvocation:方法。然而,NSObject只是简单地调用了doesNotRecognizeSelector:。通过实现您自己的forwardInvocation:消息可以通过息,
11、或者简单的“某些消息,因此没有响应也没有错误。forwardInvocation:方法也可以对消息转发的信息,参考Foundation 框架参考库中NSInvocation消息转发和多重继5-1 注意forwardInvocation:如果您希望您的对象将negotiate消息转发给其它对象,您的对象不能有negotiate if(someOtherObjectrespondsToSelector: anInvocation selector)anInvocation invokeWithsuper 类响应了该消息)消对Objective-C 2.0 程序设计语言中 类响应了该消息)消对Obj
12、ective-C 2.0 程序设计语言中同时也存在着其它类型的消消息转发和类继尽管消息转发很“象”继承,但它不是继承。例如在NSObject类中,方法respondsToSelector:询问它能否响应negotiate 返回值是尽管消息转发很“象”继承,但它不是继承。例如在NSObject类中,方法respondsToSelector:询问它能否响应negotiate 返回值是NO,尽管该对象能够接收和响应negotiate。(见5-1。除了respondsToSelector:isKindOfClass:方法也必须重新实现。如果您使用的是协议类,需要重新实现的还有conformsToPro
13、tocol:methodSignatureForSelector:-NSMethodSignature*signature=supermethodSignatureForSelector:selector; if (!signature) signature=surrogateif(superrespondsToSelector:aSelector) return YES;else/*Here,testwhethertheaSelectormessagebeforwardedtoanotherobjectandt objectcanrespondtoit.ReturnYESifitcan. r
14、eturnif(aWarriorrespondsToSelector:selector(negotiate)您也可以将消息转发的部分放在一段私有的代码里,然后从forwardInvocation:本节中涉及的方法在Foundation 框架参考库中的NSObject:的具体信息,请参考Foundation 框架参考库中NSInvocation类型编为了和运行时系统协作,编译器将方法的返回类型和参数类型都编码成一个字符串,并且和方法选标关联在一起。这些编码在别的上下文环境中同样有用,所以您可以直接使用encode()编译指令来得到具体些编码是您写您也可以将消息转发的部分放在一段私有的代码里,然后
15、从forwardInvocation:本节中涉及的方法在Foundation 框架参考库中的NSObject:的具体信息,请参考Foundation 框架参考库中NSInvocation类型编为了和运行时系统协作,编译器将方法的返回类型和参数类型都编码成一个字符串,并且和方法选标关联在一起。这些编码在别的上下文环境中同样有用,所以您可以直接使用encode()编译指令来得到具体些编码是您写的时候是6-1 Objective-C编含cislqlong Cunsigned ISunsigned char *buf1 = encode(char*buf2=encode(structkey);char
16、*buf3= returntypedefstructtypedefstructidanObject; 重要: Objective-C 不支持long double 类型。 encongdouble)和double一样,返signed Qunsigned long fdBC+bool或者C99 标准的v*字符串(char对象(无论是静态指定的还是通过的#类:方法选标arraynumbit?未知类型(其它时候,一般用来指函数指针encode()NSObject注意,尽管有一些编码无法从 属时(参考Objective-C 2.0 程序设计encode()NSObject注意,尽管有一些编码无法从 属
17、时(参考Objective-C 2.0 程序设计语言中的属性小节),编译C字符串的数组返回等。每个类或者协议类了一了的属性列6-2 Objective-C 编含rnNoORV本部分包含如下内容 属性类型和相关函 本部分包含如下内容 属性类型和相关函 例:您还可以通过property_getName函数class_getPropertyprotocol_getProperty:objc_property_tclass_getProperty(Classcls,constcharobjc_property_t protocol_getProperty(Protocol *proto, const
18、char *name, BOOL isRequiredProperty, BOOL isInstanceProperty)constchar*property_getName(objc_property_tidLenderClass=objc_getClass(Lender); erfaceLender:floatpropertyfloatalone; typedefstructobjc_property通过细节,参考“类型编码“一节;关于属性的类型编码,见“属性类型编码”及“属性特征的描述范例”属性类型编通过细节,参考“类型编码“一节;关于属性的类型编码,见“属性类型编码”及“属性特征的描述范例”属性类型编tributes返回的字符串以字母T开始,接着是encode如果属性有readonly 修饰,则字符串中含有R 如果属性有copy或者retain修饰,则字符串分别含有C 或者&字符串以V
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市更新项目建设方案
- 资料员顶岗实习报告5篇
- 关于统计局2021工作总结与工作计划的报告范文
- 计算机类实习报告集锦六篇
- 关于经理个人述职报告范文10篇
- 个人原因辞职报告书(7篇)
- 认识实习报告范文锦集九篇
- 城镇老旧小区改造项目计划书
- 2024年生石灰购销合同样本3篇
- 家用绿化养花课程设计
- 游泳教练工作计划工作总结述职报告PPT模板下载
- 食管癌的护理查房
- 【企业杜邦分析国内外文献综述6000字】
- GB/T 5343.2-2007可转位车刀及刀夹第2部分:可转位车刀型式尺寸和技术条件
- GB/T 32285-2015热轧H型钢桩
- 中考数学真题变式题库
- FZ/T 91019-1998染整机械导布辊制造工艺规范
- 主持人培训 课件
- SHSG0522003 石油化工装置工艺设计包(成套技术)内容规定
- 制造部年终总结报告课件
- 企业大学商学院建设方案
评论
0/150
提交评论