1. 程式人生 > 其它 >OC筆記 - OC物件的分類

OC筆記 - OC物件的分類

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指標

類的類方法資訊

 .......