实例对象与类对象的简单区别
来源:互联网 发布:mac切换输入法快捷方式 编辑:程序博客网 时间:2024/05/17 01:36
实例对象与类对象简单总结
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也是一种指针,是一种指向类对象的指针。(严格的来说是一种指向类对象的指针类型。它所定义的指针变量指向类对象)
- 实例对象与类对象的简单区别
- 对象与实例的区别
- java中实例与对象的区别
- 实例说明类与对象的关系及区别
- 类与对象的区别
- 类与对象的区别
- c#中类、对象、实例的区别
- java中如何去理解 类,对象(实例),方法,类变量,对象(实例)变量的区别与联系
- Class.forName与new创建对象实例的区别
- c++类与对象,数据的共享与保护 小节简单程序实例
- javascript类的创建与实例对象
- 对象与类的区别与联系
- 类与对象区别
- 对象与实例的讨论
- java中参数(对象与简单类型)的区别
- JS对象简单、深度克隆(赋值与引用的区别)
- JS对象简单、深度克隆(赋值与引用的区别)
- 循环与判断/利用函数的简单实例/使用对象/列举对象属性
- Python程序在Eclipse控制台中乱码解决方法
- UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte seque
- EntityFrameworkSection
- 分布式消息系统:Kafka
- qt编程 不现实命令行窗口
- 实例对象与类对象的简单区别
- 代码触发clistctrl控件的NM_CLICK事件
- 汇编之路-3
- java读写excel文件
- iOS事件处理---响应者链
- 奇怪的比赛
- 基于JSP+Servlet的用户登录验证
- C++虚继承(六) --- 虚继承浅析
- 多语言values文件夹创建