Obj-C: 关键字

类 Class: 类是对象的模板,定义对象的状态(实例变量/数据结构)和对象的行为(可调用的方法). 面向对象语言基于事件流来组织程序(而不是面向过程语言的程序流). 类是程序开发的核心.

类分为父类,子类; 类库定义的NSObject类是一切类的祖先. 类可以嵌套定义.

每个类都有一个实例变量 类指针isa (继承与NSObject),isa指向类结构(类定义的数据结构, 包括变量名,类型和方法的实现+指向其超类类结构的类指针).  同一类的对象其isa指针相同.通过父类类指针来查找父类方法.

[小技巧:]尽量定制类来使用已有的标准类, 而不是继承已有标准类来定制化子类.

对象Object: 对象是类的实例, 在内存中实际存在的数据和方法. 程序运行时, "类"并不存在,存在的只是"对象". 同一类的每个对象都相对独立(在内存中独立处在), 却又存在关联(彼此可以发送消息). 面向对象语言编程要做的就是:创建类+按照类的定义生成对象(分配内存)+建立对象的关联+实现对象接收不同消息时对应的行为(更改对象的状态/属性/数据/变量).对象是程序运行的核心.

Self: 保留字, 用于方法的定义中, 代表执行该方法的对象的引用. 本质是 对象的引用, 该对象是执行该方法的对象, 运行时等同于对象名. 可以通过它来接收消息, 引用属性. 在类定义中使用self 代表类对象, 不可以被直接重新赋值(self = ), 单可以代表类( [self alloc]).

Super: 保留字, 用于方法的定义中, 调用定义该方法的类父类的方法, 本质是 编译器标识, 该父类是定义该方法的类的父类, 而不是调用该方法的对象所归属的类的父类. Super只是编译器标识, 告诉编译器从哪里搜索方法, 仅用于作为消息的接受者.

这里有区别, Super不一定是Self的直接父类. 当子类对象继承父类方法而没有重载该方法时, 编译器先找到是谁最后定义了该方法, 然后再找它的父类. 这里提供了一种跳过重载方法的的途径.即 被重载的方法使用Super来调用(父类的)未被重载的方法. 换言之, 如果想调用本对象的方法, 就用Self, 如果想跳过本类(定义方法的类)的方法使用其父类的方法, 就用Super.

Super的意义还在于可以使用父类已定义好的行为,然后再定制自己的行为. 这一点对于定制子类尤其重要. 例如, 子类的init方法, dealloc方法, 都先调用父类的该方法.

posted on 2012-07-03 10:36  FuniOS  阅读(206)  评论(0编辑  收藏  举报