OC對(duì)象的分類

iOS中OC對(duì)象可以分為如下的三種:

1、instance對(duì)象(實(shí)例對(duì)象):

(1)這種類型的對(duì)象是通過(guò)類alloc出來(lái)的對(duì)象,每次調(diào)用alloc方法,都會(huì)產(chǎn)生一個(gè)新的instance對(duì)象,然后系統(tǒng)就會(huì)給這個(gè)新對(duì)象分配一塊內(nèi)存空間來(lái)存儲(chǔ)它首懈;
(2)instance對(duì)象可以有多個(gè),每alloc出來(lái)一個(gè)對(duì)象就是一個(gè)新的instance對(duì)象谨敛;
(3)instance對(duì)象在內(nèi)存中存儲(chǔ)的信息包括:

  • isa指針:因?yàn)樗械膇nstance對(duì)象所在的類都繼承自NSObject究履,NSObject的底層結(jié)構(gòu)中就有isa指針,所以所有的instance對(duì)象里面都存儲(chǔ)著isa指針脸狸;
  • instance對(duì)象所在類的成員變量的具體值最仑,但是不存儲(chǔ)這些成員變量的類型和名稱,也不存儲(chǔ)實(shí)例方法和類方法炊甲。

2泥彤、class對(duì)象(類對(duì)象):

(1)每個(gè)類只有一個(gè)class對(duì)象;
(2)class對(duì)象在內(nèi)存中存儲(chǔ)的信息包括:

  • isa指針卿啡;
  • superclass指針吟吝;
  • 類的屬性信息(@property);
  • 類的協(xié)議信息(protocol)颈娜;
  • 類的對(duì)象方法信息(instance method):即類的實(shí)例方法(以減號(hào)開頭的方法)剑逃,但是類方法(以加號(hào)開頭的方法)不存儲(chǔ)在class對(duì)象中,而是存儲(chǔ)在meta-class對(duì)象中官辽;
  • 類的成員變量信息(ivar):只存儲(chǔ)類的成員變量的類型和名稱(這些只需要存儲(chǔ)一份而已)蛹磺,不存儲(chǔ)這些成員變量的值,值存儲(chǔ)在instance對(duì)象中同仆。

3萤捆、meta-class對(duì)象(元類對(duì)象):

(1)每個(gè)類在內(nèi)存中有且只有一個(gè)meta-class對(duì)象;
(2)meta-class對(duì)象在內(nèi)存中存儲(chǔ)的信息包括:

  • isa指針;
  • superclass指針鳖轰;
  • 類的類方法信息(class method):即以加號(hào)開頭的方法,但不存儲(chǔ)實(shí)例方法(以減號(hào)開頭的方法)。實(shí)例方法存儲(chǔ)在class對(duì)象中。
    (3)meta-class對(duì)象是一種特殊的class對(duì)象产捞。
OC對(duì)象的三種類型

相關(guān)代碼:

#import <Foundation/Foundation.h>
#import <objc/runtime.h>

//自定義Person類
@interface Person : NSObject
{
    int _age;
    int _height;
    int _no;
}
@end

@implementation Person

@end

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        /**
         獲取instance對(duì)象:
         下面獲取到的兩個(gè)instance對(duì)象是不同的兩個(gè)對(duì)象仪壮。
         */
        NSObject *object = [[NSObject alloc] init];
        NSObject *object1 = [[NSObject alloc] init];
        NSLog(@"instance對(duì)象:%p, %p", object, object1);
        
        /**
         獲取class對(duì)象:
         通過(guò)下面幾種方式獲取到的class對(duì)象是同一個(gè)對(duì)象,每個(gè)類在內(nèi)存中有且只有一個(gè)類對(duì)象甩苛。
         */
        Class objectClass = [object class];
        Class objectClass1 = [object1 class];
        Class objectClass2 = [NSObject class];
        Class objectClass3 = object_getClass(object);
        Class objectClass4 = object_getClass(object1);
        NSLog(@"class對(duì)象:%p, %p, %p, %p, %p", objectClass, objectClass1, objectClass2, objectClass3, objectClass4);
        
        /**
         獲取meta-class對(duì)象:
         1、在object_getClass函數(shù)中傳入的是class對(duì)象,則獲取到的是meta-class對(duì)象狞膘,每個(gè)類在內(nèi)存中有且只有一個(gè)meta-class對(duì)象;
         2什乙、在object_getClass函數(shù)中傳入的是instance對(duì)象挽封,則獲取到的是class對(duì)象;
         3臣镣、在object_getClass函數(shù)中傳入的是meta-class對(duì)象辅愿,則獲取到的是NSObject(基類)的meta-class對(duì)象。
         */
        Class objectMetaClass = object_getClass([NSObject class]);
        NSLog(@"meta-class對(duì)象:%p", objectMetaClass);
        
        //用class_isMetaClass函數(shù)來(lái)判斷傳進(jìn)來(lái)的參數(shù)是不是meta-class對(duì)象忆某。
        BOOL isMetaClass = class_isMetaClass(objectMetaClass);
        NSLog(@"%d", isMetaClass);
    }
    
    return 0;
}

Github Demo

”三人行点待,必有我?guī)熝伞埃?歡迎各位批評(píng)指正。
如果您還覺(jué)得我寫的不錯(cuò)的話請(qǐng)您點(diǎn)贊加關(guān)注弃舒,您的肯定是我前進(jìn)的最大動(dòng)力癞埠!
我是愛(ài)學(xué)習(xí)也愛(ài)您的樹懶O(∩_∩)O

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市聋呢,隨后出現(xiàn)的幾起案子苗踪,更是在濱河造成了極大的恐慌,老刑警劉巖坝冕,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徒探,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡喂窟,警方通過(guò)查閱死者的電腦和手機(jī)测暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磨澡,“玉大人碗啄,你說(shuō)我怎么就攤上這事∥壬悖” “怎么了稚字?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我胆描,道長(zhǎng)瘫想,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任昌讲,我火速辦了婚禮国夜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘短绸。我一直安慰自己车吹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布醋闭。 她就那樣靜靜地躺著窄驹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证逻。 梳的紋絲不亂的頭發(fā)上乐埠,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音瑟曲,去河邊找鬼饮戳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛洞拨,可吹牛的內(nèi)容都是我干的扯罐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼烦衣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歹河!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起花吟,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秸歧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后衅澈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體键菱,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年今布,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了经备。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡部默,死狀恐怖侵蒙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傅蹂,我是刑警寧澤纷闺,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布算凿,位于F島的核電站,受9級(jí)特大地震影響犁功,放射性物質(zhì)發(fā)生泄漏氓轰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一浸卦、第九天 我趴在偏房一處隱蔽的房頂上張望戒努。 院中可真熱鬧,春花似錦镐躲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匣椰,卻和暖如春裆熙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背禽笑。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工入录, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佳镜。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓僚稿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蟀伸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚀同,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容