[转]iOS isa 浅析
来源:互联网 发布:搜狗浏览器打开淘宝卡 编辑:程序博客网 时间:2024/06/06 00:57
看见一到面试题讲述一下Objective-C中的isa?完全没听说过,打算小研究一下。
参考:http://blog.sina.com.cn/s/blog_7a2ffd5c01010nme.html
原来isa类似类似于java中的class,用于动态的获取一个类动态运行时的信息。不过OC比java牛B的是,OC可以在运行时为类添加方法,所以isa比class稍微复杂一点。
看一下NSObject类的.h
1 @interface NSObject <NSObject> {2 Class isa OBJC_ISA_AVAILABILITY;3 }
NSObject类作为所有OC对象的父类只有这一个属性isa,我们有必要研究一下,它究竟是什么。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
官方介绍是这样的:
Every object is connected to the run-time system through its isa instance variable, inherited from the NSObject class. isa identifies the object's class; it points to a structure that's compiled from the class definition. Through isa, an object can find whatever information it needs at runtime such as its place in the inheritance hierarchy, the size and structure of its instance variables, and the location of the method implementations it can perform in response to messages.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
翻译是这样的:
每个对象都是通过isa实例变量连接到运行时系统,从NSObject类继承。Isa标识对象的类;它指向一个结构的类定义编译。
通过ISA,可以在运行时找到一个对象的所有信息,如继承层次结构中的位置,它的实例变量的大小和结构,以及可以相应消息的方法所实现的位置。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
可见,通过一个实例对象(Object)的isa,我们可以找到一个对象的所有信息,如类属性的结构,类方法(消息)的入口地址等。
我们再来看一下Class类
struct objc_class { Class isa OBJC_ISA_AVAILABILITY;#if !__OBJC2__ Class super_class OBJC2_UNAVAILABLE; const char *name OBJC2_UNAVAILABLE; long version OBJC2_UNAVAILABLE; long info OBJC2_UNAVAILABLE; long instance_size OBJC2_UNAVAILABLE; struct objc_ivar_list *ivars OBJC2_UNAVAILABLE; struct objc_method_list **methodLists OBJC2_UNAVAILABLE; struct objc_cache *cache OBJC2_UNAVAILABLE; struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;#endif} OBJC2_UNAVAILABLE;/* Use `Class` instead of `struct objc_class *` */
我们发现,objc_class结构体中,还有一个Class属性,它是什么作用呢?对象的类(Class)的isa指向了metaclass。通过它我们可以找到静态变量和方法,还有在这个类里动态添加的类别方法。
Object-C对类对象与实例对象中的 isa 所指向的类结构作了不同的命名:类对象中的 isa 指向类结构被称作 metaclass,metaclass 存储类的static类成员变量与static类成员方法(+开头的方法);实例对象中的 isa 指向类结构称作 class(普通的),class 结构存储类的普通成员变量与普通成员方法(-开头的方法)。
- [转]iOS isa 浅析
- iOS isa 浅析
- iOS isa 浅析
- ios中isa指针
- ios isa 是什么鬼???
- iOS中isa指针
- ios - objectC 的isa 详解
- ios JSONKit isa 错误解决
- isa
- isa
- isa
- IOS 运行时、ISA、动态、runtime。。。
- iOS开发isa 指针 与 runtime 机制
- 【Android基础学IOS开发】BOOL SEL IMP isa
- iOS 中得isa 和self 的详解
- iOS中Cocoa框架·Runtime及isa指针知识
- iOS开发关于oc运行时 isa指针详解
- iOS开发关于oc运行时 isa指针详解
- 当你输入一个网址后回车,实际会发生什么?
- 我的彩票界面
- 源码阅读笔记
- 非主流自然语言处理——遗忘算法系列(二):大规模语料词库生成
- 没有躲过的坑--正则表达式截取字符串
- [转]iOS isa 浅析
- Poj 352 UVA oj 1395 Slim Span 最小生成树应用
- java集合类ArrayList
- DICOM:DICOM3.0网络通信协议(三)
- mybatis 一对多
- 使用(x&y) + ((x^y)>>1) 求平均数
- JSON 之FastJson解析
- 南大软院大神养成计划--HTML和CSS基础课程(四)
- AppScan--图解Web扫描工具IBM Security App Scan Standard