五、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的返回值。通常我們複寫它來方便列印
相關文章
- 窺探NSObjectObject
- 由 NSObject *obj = [[NSObject alloc] init] 引發的一二事兒Object
- 知識點:id 和NSObject *對比,以及id <NSObject>介紹Object
- NSObject 物件佔用記憶體、isa/superclass指向、類資訊存放Object物件記憶體
- NSObject 的 initialize 和 load 方法Object
- 五,常用類
- 併發工具類(五) Phaser類
- MXRuntimeUtils,替代 [NSObject performSelector object object ]的工具ObjectperformSelector
- Object-C語言Block的實現方式ObjectC語言BloC
- iOS 多執行緒之NSThread和NSObjectiOS執行緒threadObject
- NSObject +(void)load 和+(void)initialize 方法的理解Object
- Java第五課. 類&物件Java物件
- 假期使用Object-C製作了一個骰子游戲Object
- iOS底層原理探究- NSObject 所佔記憶體iOSObject記憶體
- 懶人做開發系列:利用Object-C特性埋點Object
- JVM初探(五):類的例項化JVM
- 五分鐘讀懂UML類圖
- JavaScript夯實基礎系列(五):類JavaScript
- java學習(五) —— 常用API類概述JavaAPI
- 五分鐘看懂UML類圖與類的關係詳解
- 五個檢視擴充套件類 LL套件
- TypeScript學習筆記之五類(Class)TypeScript筆記
- IBM:未來五年改變人類生活的五項技術IBM
- 五分鐘快速瞭解ArrayLike(類陣列)陣列
- object-c 常用判斷null的巨集定義,如果是null直接返回@””ObjectNull
- 暑期自學 Day 05 | File 類 和 IO 流(五)
- JVM(五)----虛擬機器類載入機制JVM虛擬機
- Python有哪些資料探勘工具?五大類Python
- IP地址的分類:A、B、C、D、E五類IP地址是如何劃分的
- 開源 - Ideal庫 - Excel幫助類,ExcelHelper實現(五)IdeaExcel
- 類設計方法:以五子棋為例
- Java核心技術第五章——2.Object類JavaObject
- 機器學習Sklearn系列:(五)聚類演算法機器學習聚類演算法
- python常用的資料庫有哪些?五大類!Python資料庫
- 深入理解JVM(五)Class類的檔案結構JVM
- 這五類人最適合轉Web前端,有你嗎?Web前端
- 【Django drf】檢視類APIView之五層封裝 ApiView的類屬性 drf配置檔案DjangoAPIView封裝
- 今天在object-c 和swift 混編的時候出現錯誤:could not build module foundationObjectSwiftUI