類的本質:
類其實也是一個對象, 這個對象會在這個類第一次被使用的時候創建
只要有了類對象, 將來就可以通過類對象來創建實例對象
實例對象中有一個isa指針, 指向創建自己的類對象
類對象中保存了當前對象所有的對象方法
當給一個實例對象發送消息的時候, 會根據實例對象中的isa指針去對應的類對象中查找
1.如何獲取類對象
// [實例對象 class]; [類名 class];
Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
// 一個類再內存中只有一份類對象
Class c1 = [p1 class];
Class c2 = [p2 class];
Class c3 = [Person class];
NSLog(@"c1 = %p, c2 = %p, c3 = %p", c1, c2, c3);
2.類對象的應用場景
// 2.1用于創建實例對象
Person *p3 = [[c1 alloc] init];
p3.age = 30;
NSLog(@"%i", p3.age);
// 2.2用于調用類方法
[c1 test];
3.類的啟動過程
// 只要程序啟動就會將所有類的代碼加載到內存中, 放到代碼區
// load方法會在當前類被加載到內存的時候調用, 有且僅會調用一次
// 如果存在繼承關系, 會先調用父類的load方法, 再調用子類的load方法
+ (void)load
{
NSLog(@"Person類被加載到內存了");
}
// 當當前類第一次被使用的時候就會調用(創建類對象的時候)
// initialize方法在整個程序的運行過程中只會被調用一次, 無論你使用多少次這個類都只會調用一次
// initialize用于對某一個類進行一次性的初始化
// initialize和load一樣, 如果存在繼承關系, 會先調用父類的initialize再調用子類的initialize
+ (void)initialize
{
NSLog(@"Person initialize");
}