Objective-C 碎碎念 5

本文為大地瓜原創(chuàng),歡迎知識共享,轉(zhuǎn)載請注明出處。
雖然你不注明出處我也沒什么精力和你計較。
作者微信號:christgreenlaw


本節(jié)主要學(xué)習(xí)了對OC類的分析。

類的本質(zhì)

類在OC中也是一個對象,這個類對象會在類第一次被使用時創(chuàng)建。
有了類對象后,可以通過類對象來創(chuàng)建實例對象。
實例對象中有一個isa結(jié)構(gòu),指向自己的類對象。

類對象中保存了該類的所有對象方法,當給一個實例對象發(fā)送消息時,會到實例對象isa指針對應(yīng)的類對象中查找。

若要獲取類對象,則向類名或者實例對象發(fā)送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);
//一個類在內(nèi)存中只有一個類對象
類對象的輸出.png

類對象能用來干嘛呢?

創(chuàng)建實例對象

Person *p3 = [[c1 alloc] init];

調(diào)用類方法

[c1 test];

其實類對象的使用方法和類名是一樣的。

類的加載邏輯

當程序啟動時,所有的類代碼就會加載到內(nèi)存中
load方法會在當前類被加載到內(nèi)存時調(diào)用,且只會調(diào)用一次
如果存在繼承關(guān)系,則會先調(diào)用父類的load方法,在調(diào)用子類的load方法(此時類對象還沒有創(chuàng)建,只是類代碼加載到了內(nèi)存中)

當前類第一次使用到的時候回調(diào)用initialize方法(也就是創(chuàng)建類對象時)
initialize方法只會被調(diào)用一次
initialize方法用于對某個類進行一次性的初始化
如果存在繼承關(guān)系,則會先調(diào)用父類的initialize方法,在調(diào)用子類的initialize方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評論 0 9
  • 讀后感先放在前邊現(xiàn)在詳細來看這本書應(yīng)該也不晚吧,iOS 開發(fā)之類的書籍其實網(wǎng)上的總結(jié)還是蠻多的 有很多文章寫得都是...
    奧卡姆剃須刀閱讀 746評論 0 6
  • 前言 這本書和Objective-C高級編程-iOS和OS X多線程和內(nèi)存管理實在是iOS開發(fā)人員必讀書. 實在是...
    Jerry4me閱讀 2,713評論 8 41
  • 一、概述 Objective-C語言是一門動態(tài)語言,它將很多靜態(tài)語言在編譯和鏈接期所做的事推遲到運行時處理。這種動...
    Fly晴天里Fly閱讀 1,284評論 0 6
  • 文中的實驗代碼我放在了這個項目中。 以下內(nèi)容是我通過整理[這篇博客] (http://yulingtianxia....
    茗涙閱讀 1,021評論 0 6

友情鏈接更多精彩內(nèi)容