五、Object-C 類NSObject

weixin_33860722發表於2018-07-09

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的返回值。通常我們複寫它來方便列印

相關文章