五、Object-C 類NSObject
認識類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的返回值。通常我們複寫它來方便列印
相關文章
- NSObject class和NSObject protocol的關係(抽象基類與協議)ObjectProtocol抽象協議
- 窺探NSObjectObject
- 1. NSObjectObject
- NSObject 物件佔用記憶體、isa/superclass指向、類資訊存放Object物件記憶體
- 由 NSObject *obj = [[NSObject alloc] init] 引發的一二事兒Object
- 知識點:id 和NSObject *對比,以及id <NSObject>介紹Object
- 五,常用類
- id 和 NSObject區別Object
- object-c基礎Object
- Object-C複習Object
- 併發工具類(五) Phaser類
- object-c中疑問Object
- Object-C,物件和方法Object物件
- Object-C,陣列NSArrayObject陣列
- Object-C初體驗Object
- NSObject 的 initialize 和 load 方法Object
- NSObject的load和initialize方法Object
- NSObject 的 load 和 initialize 方法Object
- OC Runtime之Weak(3)---探究NSObjectObject
- NSObject的+load和+initialize詳解Object
- 從Object-C -> Swift3.0ObjectSwift
- Object-C之(Null)與(Bool)ObjectNull
- Object-C,NSSet,不可變集合Object
- Object-C陣列和字典Object陣列
- Object-C,遍歷目錄Object
- Java第五課. 類&物件Java物件
- Java解惑五:類之謎Java
- 檢測 NSObject 物件持有的強指標Object物件指標
- OC load、initialize、一些NSObject方法Object
- object-c 協議和委託Object協議
- object-c [self class] 和 [self _cmd]Object
- Object-C,檔案路徑APIObjectAPI
- Java I/O 教程(五) BufferedOutputStream 類Java
- 深入淺出UML類圖(五)
- iOS 多執行緒之NSThread和NSObjectiOS執行緒threadObject
- MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具ObjectperformSelector
- Object-c KVC的使用和舉例Object
- Object-c Block的使用及說明ObjectBloC