iOS开发者专题OC学习码神之路:Object-C篇

五、Objective-C 类NSObject

2018-07-09  本文已影响2人  Yink_Liu

Objective-C学习索引

认识类NSObject

1.1、根类的作用

首先提个概念,运行时系统:类似OC的操作系统,负责完成对象的生成、释放时的内存管理、为发来的消息查对应的处理方法。

NSObject根类方法提供了运行时系统的基本功能

1.2、NSObject中类和实例变量的相关方法。

NSObject只有一个实例变量,Class类型的变量isa,用来标示对象属于哪个类对象。子类不能修改isa也不可直接访问,通过方法class来完成查询。

以下就是类和实例变量的相关方法的说明。

- (Class) class 返回消息接受者所属的类对象

+ (Class) class // 返回类对象,可以用类名调用此方法。注意当类对象时其他消息的参数,或者将类对象赋值给变量的时候,需要通过这个类方法来获取类对象,也就是需要类对象转换。

- (id) self // 返回接受者自身

- (BOOL) isMemberOfClass: (Class) aClass // 判断消息接受者是不是传入参数aClass的对象

+ (BOOL) isKindOfClass: (Class) aClass // 判断消息接收者是不是传入参数aClass类或者aClass的子类的实例。此方法和isMemberOfClass的区别在于使子类的时候也会返回YES

+ (BOOL) isSubclassOfClass: (Class) aClass // 判断消息接受者是不是传入参数aClass的子类或自身

- (Calss) superclass // 返回消息接收者所在类的父类的类对象

+ (Class) superclass // 返回消息接收类所在父类的类对象

理解下面这个例子,你就掌握这个知识点了


People *people = [[People alloc] init];

Student *student = [[Student alloc] init];

BOOL a = [people isKindOfClass:[People class]];

BOOL b = [people isKindOfClass:[NSObject class]];

BOOL c = [student isMemberOfClass:[Student class];

BOOL d = [student isMemberOfClass:[NSObject class]];

BOOL aa = [(id)[NSObject class] isKindOfClass:[NSObject class]];

BOOL bb = [(id)[NSObject class] isMemberOfClass:[NSObject class]];

BOOL cc = [(id)[Student class] isKindOfClass:[People class]];

BOOL dd = [(id)[Student class] isMemberOfClass:[Student class]];

以上代码,a,b,c为YES,d为NO、 aa为YES,bb,cc,dd为NO

adbcd好理解,主要是后面,(id)[NSObject class] 是一个类对象的实例,每个类只有一个类对象


NSObject * obj =[ [NSObject alloc] init];

Class  objClass = [obj class];

objClass isKindOfClass:[NSObject class]  //类对象也是一个对象,所以它可以作为NSObject的某个子类的对象来使用。所以这样为YES

1.3、实例对象的生成和释放

+ (id) alloc // 生成消息接收类的实例对象。通常和init或init开头的方法连用。子类中不允许重写alloc方法。

- (void) dealloc // 释放对象,作为对象release的结果调用。只能在子类中重写,不能直接调用此方法。

和实例对象相关的其它方法,多数用来引用计数或者垃圾回收。ARC下都不用,所以省略。

1.4、初始化

- (id) init // init可对alloc生成的实例对象进行初始化,子类可以复写或者定义新的init开头的初始化函数

+ (void) initialize // 被用于类的初始化。在类收到消息之前就会自动调用,不允许手动调用。

+ (id) new // new使alloc和init方法的结合。根据类的实现的不同,new方法不会每次都返回一个全新的实例对象,有时new方法会返回对象池中预先生成的对象,也有可能每次都返回同一个对象。

1.4、对象的比较

- (BOOL) isEqual: (id) anObject // 消息的接受者如果和参数anObject相等就返回YES

1.5、对象的描述

+ (NSString *) description // 返回消息接受者所属类的内容。通常都是这个类的名字。

- (NSString *) description // 返回消息接受者实例对象的内容。通常是类名加id值。子类中可以重新定义description的返回值。通常我们复写它来方便打印

上一篇 下一篇

猜你喜欢

热点阅读