類的本質

類的本質:

類其實也是一個對象, 這個對象會在這個類第一次被使用的時候創建
只要有了類對象, 將來就可以通過類對象來創建實例對象
實例對象中有一個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");
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前言 今天整理了下自己電腦里的一些碎片筆記,時間有限只整理了這篇文章——類的本質,大家可以進行參考。 1.本質 類...
    VV木公子閱讀 2,189評論 3 17
  • 類的本質:類其實也是一個對象, 這個對象會在這個類第一次被使用的時候創建只要有了類對象, 將來就可以通過類對象來創...
    山中石頭閱讀 369評論 0 0
  • 1.類的本質 類的本質其實也是一個對象(類對象)程序中第一次使用該類的時候被創建,在整個程序中只有一份。此后每次使...
    GSChan閱讀 3,130評論 0 13
  • 我快要進入下一段戀情了,只要我說一個好字。我感覺很甜,他對我很好很好啊,又會說甜言蜜語,人也不錯,陽光帥氣的,還挺...
    李知樹閱讀 559評論 4 7
  • 不知道為什么到現在還沒睡著。那么就來談談我的信仰。 我不知道你們都是否有信仰,但是我是一名基督徒。 從小就跟著爺爺...
    d46ca12478f0閱讀 236評論 1 4