NSObject类
通常情况下,程序中无法使用运行时系统提供的功能,但是根类方法中提供了运行时系统的基本功能,而继承了NSObject类的所有类都可以自由的使用运行时系统的功能,简而言之根类就是运行时系统的接口。
实例和类
NSObject的实例变量只有一个就是Class类型的变量isa。isa用于标识实例对象属于哪个类对象,由于isa非常重要所以子类不可改变isa的值,同时也不能直接访问只能通过实例方法class来查询。
- (Class)class 返回所属类的类对象
+ (Class)class 可以通过这个类方法获取类对象
+ (BOOL)isSubclassOfClass : (Class) aClass 判断是不是参数类本身或者子类
- (BOOL)isKindOfClass : (Class) aClass 判断是不是参数类或者子类的对象
实例对象的初始化
- (id)init init可以对alloc的实例对象初始化
+ (void)initialize 用于类的初始化,对类中共同使用的变量进行初始化设定
+ (id)new alloc和init的组合 new方法
对象的比较
- (BOOL)isEqual:(id)anObject 如果相同返回YES
既是同一个指针指向的对象是相等的。
对象内容的描述
+ (NSString *)description 通常返回这个消息接受这所属的类
消息发送的机制
选择器以及SEL类型
程序中的方法名(选择器)在编译后会被一个内部标志符代替,对应的数据类型就是SEL类型。
在OC中为了能在程序中操作编译后的选择器,定义了@selector()指令。
@selector(compare:)
为了避免每次发送消息都要搜寻,在运行时系统内部会缓存一个散列表,表中记录着某个类拥有和什么选择器对应的方法、被定义在了何处,提高了效率,如果想更快,可以通过C中的函数,但无法使用对象的动态绑定等。
类对象以及实例对象
- 所有类的实例对象都可以执行根类的实例方法
- 所有类的类对象都可以执行根类的类方法
- 所有类的类对象都可以执行根类的实例方法