OC筆記 - OC物件的分類
阿新 • • 發佈:2022-05-26
OC物件的分類
1 - OC中的物件主要可以分為三種
① instance物件:例項物件
② class物件:類物件
③ meta-class物件:元類物件
例項物件
1 - 例項物件是通過類 alloc出來的物件,每次 alloc都會產生出一個新的例項物件,佔據不同的記憶體
NSObject *objc1 = [NSObject new]; NSObject *objc2 = [[NSObject alloc] init]; NSLog(@"objc1 = %p objc2 = %p",objc1,objc2); // objc1 = 0x1038292b0 objc2 = 0x103827c50
2 - 例項物件中儲存的資訊包括
① isa指標
② 其他成員變數
類物件
1 - 類物件在記憶體是獨一份,每個類在記憶體中有且只有一個類物件
1 #import <Foundation/Foundation.h> 2 #import <objc/runtime.h> 3 4 int main(int argc, const char * argv[]) { 5 6 NSObject *objc1 = [NSObject new]; 7 NSObject *objc2 = [[NSObject alloc] init]; 8 9 Class obClass1 = [objc1 class]; 10 Class obClass2 = [objc2 class]; 11 Class obClass3 = [NSObject class]; 12 13 // runtime函式 14 Class obClass4 = object_getClass(objc1); 15 Class obClass5 = object_getClass(objc2); 16 17 // 你會發現都是同一份 18 NSLog(@"obClass1 = %p obClass2 = %p obClass3 = %p",obClass1,obClass2,obClass3);19 // obClass1 = 0x7fff91cb8118 obClass2 = 0x7fff91cb8118 obClass3 = 0x7fff91cb8118 20 NSLog(@"obClass4 = %p obClass5 = %p",obClass4,obClass5); 21 // obClass4 = 0x7fff91cb8118 obClass5 = 0x7fff91cb8118 22 return 0; 23 }
2 - 類物件中儲存的資訊
① isa指標
② superClass指標
③ 類的屬性資訊、類的物件方法資訊
④ 類的成員變數資訊、類的協議資訊
.......
元類物件
1 - 每個類在記憶體中有且只有一份元類物件。它和類物件的記憶體結構是一樣的(長的一樣),但是用途不一樣
1 Class obClass3 = [NSObject class]; 2 Class metaClass = object_getClass(obClass3); 3 NSLog(@"metaClass = %p obClass3 = %p",metaClass,obClass3); 4 // metaClass = 0x7fff91cb80f0 obClass3 = 0x7fff91cb8118
2 -元類物件中儲存的資訊
① isa指標
② superClass指標
③ 類的類方法資訊
.......