实例对象与类对象的简单区别
2016-03-18 17:37
204 查看
实例对象与类对象简单总结
1.什么是对象?(实例对象)苹果官方是这样定义的:
struct objc_object { Class isa OBJC_ISA_AVAILABILITY; };
这里可以这么解释,对象是一种结构体,是一种含有isa指针的结构体。
只要含有isa指针的结构体,就是对象。(这里最好是只含有isa指针的结构体),对象变量也可以说是一种结构体变量。
2.什么是id?
苹果官方是这样定义的:
typedef struct objc_object *id;
id是一种指针,是一种指向对象的指针。(严格的说是一种指针类型,是一种指向对象的指针类型,它所定义的指针指向对象类型的变量,或者说是指向对象类型的结构体变量。)
3.什么是类?(类对象)
苹果官方是这样定义的:
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;
类也是一种结构体,与对象结构比较,除了isa外它还有一些其他的属性。
最明显的是:super_class指针,类对象比实例对象多了一个super_class指针。
如果在仔细观察,我们还会发现这四行代码:
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;
属性列表
方法列表
缓存列表(提高方法的命中率)
协议列表
4.什么是Class?
苹果官方是这样定义的:
typedef struct objc_class *Class;
看来Class也是一种指针,是一种指向类对象的指针。(严格的来说是一种指向类对象的指针类型。它所定义的指针变量指向类对象)
相关文章推荐
- mysql 5.6版本免验证密码方式登陆
- js 获取随机字符串
- win7下安装mysql
- VMware下Ubuntu与宿主Windows共享文件夹
- Struts 2 和 JSF 的区别
- 解决服务器从url上下载中文名字文件失败的问题
- UIBezierPath贝塞尔弧线常用方法记
- complicated declarations
- 一个月赚多少钱 才能在北京生活下去!
- C++ 升级到 Vs2013后编译设置
- 弱点
- Cordova各个插件使用介绍系列(五)—$cordovaGeolocation获取当前位置
- 后台获取当前客户端浏览器的类型
- js之form表单的获取
- linux下c mysql编程函数总结2
- C++虚继承(五) --- 虚拟继承的概念
- mongodb调优那些事(二)-索引
- Fast-RCNN安装与使用(跑demo)
- jxl操作实现导出读取excel
- Android Studio使用技巧:导入第三方类库