从这个参考:
创建新对象时,将分配其内存,并初始化其实例变量.对象变量中的第一个是指向其类结构的指针.这个名为isa的指针使对象可以访问它的类,并通过该类访问它继承的所有类.
从我能理解的读到这个和它,它允许,一个,使用内省但是以务实的方式(iOS开发),程序员可以从知道/理解这个特殊指针中获益吗?
小智 5
在 64 位环境中,不应访问对象的 ISA 字段。ISA 字段不再包含指针。它包括一些指针数据并使用剩余的位来保存其他运行时信息。CLASS 属性或 OBJECT_GETCLASS 函数可用于读取 isa 字段。OBJECT_SETCLASS 可用于写入 isa 字段。
参考:https : //developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW1
在运行时,当一条消息被发送到一个对象时,该对象会转到创建它的类并说:“我收到了这条消息。运行匹配方法的代码。” 这与大多数编译语言不同,在大多数编译语言中,要执行的方法是在编译时确定的。
对象如何知道是哪个类创建的?
它使用它的isa指针。每个对象都有一个名为 isa 的实例变量。创建对象时,该类将返回对象的 isa 实例变量设置为指向该类。它被称为 isa 指针,因为对象“是”该类的实例。尽管您可能永远不会明确使用 isa 指针,但它的存在使 Objective-C 获得了它的大部分功能。
一个对象只有在它的类(由它的 isa 指针指向)实现了相关的方法时才会响应消息。因为这是在运行时发生的,所以 XCode 不能总是在编译时(在构建应用程序时)确定对象是否会响应消息。如果 XCode 认为您正在向不会响应的对象发送消息,则它会给您一个错误,但如果不确定,它将让应用程序构建。
如果由于某种原因(并且有很多可能性),您最终向没有响应的对象发送消息,您的应用程序将抛出异常。所以isa指针是运行时错误的原因。让我们在这里检查细节和示例:IOS - Objective-C - Exceptions And Unrecognized Selectors
| 归档时间: |
|
| 查看次数: |
12477 次 |
| 最近记录: |