欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:ios objc

柚子快報(bào)激活碼778899分享:ios objc

http://yzkb.51969.com/

入門

在 Objective-C 中,objc_object 和 objc_class 是運(yùn)行時(shí)系統(tǒng)的核心結(jié)構(gòu),用于表示對象和類。理解它們的結(jié)構(gòu)和關(guān)系對于掌握 Objective-C 的運(yùn)行時(shí)機(jī)制非常重要。

objc_object 結(jié)構(gòu)

objc_object 結(jié)構(gòu)代表一個(gè) Objective-C 對象。每個(gè) Objective-C 對象都有一個(gè) isa 指針,指向它的類對象。

objc_object 結(jié)構(gòu)示例

struct objc_object {

Class isa; // isa 指針,指向類對象

};

isa:這是一個(gè)指向類對象的指針,通過它可以找到對象所屬的類及其方法和其他元數(shù)據(jù)。

objc_class 結(jié)構(gòu)

objc_class 結(jié)構(gòu)代表一個(gè)類對象。類對象本質(zhì)上也是對象,因此它也有一個(gè) isa 指針,指向它的元類(meta-class)。此外,objc_class 結(jié)構(gòu)還包含了有關(guān)類的其他信息,如方法列表、成員變量、協(xié)議等。

objc_class 結(jié)構(gòu)示例

struct objc_class {

Class isa; // isa 指針,指向元類對象

Class super_class; // 指向父類對象

const char *name; // 類的名稱

long version; // 類的版本信息

long info; // 類的信息標(biāo)志位

long instance_size; // 實(shí)例的大小

struct objc_ivar_list *ivars; // 成員變量列表

struct objc_method_list **methodLists; // 方法列表數(shù)組

struct objc_cache *cache; // 方法緩存

struct objc_protocol_list *protocols; // 協(xié)議列表

};

objc_class 結(jié)構(gòu)字段解釋

isa:指向元類對象的指針。元類對象包含類方法和元類的元數(shù)據(jù)。super_class:指向父類對象的指針。實(shí)現(xiàn)繼承鏈。name:類的名稱。version:類的版本信息。info:類的信息標(biāo)志位,包含一些布爾值標(biāo)志。instance_size:實(shí)例的大小,表示分配對象內(nèi)存時(shí)需要的大小。ivars:成員變量列表,指向類的成員變量列表。methodLists:方法列表數(shù)組,指向類的方法列表。cache:方法緩存,指向方法調(diào)用的緩存。protocols:協(xié)議列表,指向類實(shí)現(xiàn)的協(xié)議列表。

objc_class 和 objc_object 的關(guān)系

在 Objective-C 中,類本身也是對象。這意味著 objc_class 結(jié)構(gòu)是 objc_object 結(jié)構(gòu)的一個(gè)子類。每個(gè)類對象都有一個(gè) isa 指針,指向其元類對象。元類對象也有一個(gè) isa 指針,指向根元類對象。

類和元類關(guān)系圖

+--------------------+ +--------------------+ +--------------------+

| 實(shí)例對象 | --> | 類對象 | --> | 元類對象 |

+--------------------+ +--------------------+ +--------------------+

| isa -> Class | | isa -> MetaClass | | isa -> RootMetaClass|

+--------------------+ +--------------------+ +--------------------+

| | | super_class | | super_class |

+--------------------+ +--------------------+ +--------------------+

實(shí)例對象 的 isa 指針指向類對象。類對象 的 isa 指針指向元類對象。元類對象 的 isa 指針指向根元類對象。

具體示例

以下是一個(gè)具體示例,展示如何使用 objc_object 和 objc_class 結(jié)構(gòu):

#import

#import

@interface MyClass : NSObject

@end

@implementation MyClass

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

MyClass *obj = [[MyClass alloc] init];

Class objClass = object_getClass(obj);

Class objMetaClass = object_getClass(objClass);

NSLog(@"Instance: %p", obj);

NSLog(@"Class: %p", objClass);

NSLog(@"MetaClass: %p", objMetaClass);

NSLog(@"Instance isa: %p", *(uintptr_t *)obj);

NSLog(@"Class isa: %p", *(uintptr_t *)objClass);

NSLog(@"MetaClass isa: %p", *(uintptr_t *)objMetaClass);

}

return 0;

}

在這個(gè)示例中,我們使用 object_getClass 函數(shù)獲取對象的類和元類,然后打印它們的內(nèi)存地址和 isa 指針。輸出結(jié)果顯示了對象、類和元類之間的關(guān)系。

小結(jié)

objc_object:表示一個(gè) Objective-C 對象,包含一個(gè) isa 指針,指向類對象。objc_class:表示一個(gè)類對象,包含 isa 指針、父類指針、方法列表、成員變量等信息。類和元類:類對象也是對象,isa 指針指向元類對象,元類對象的 isa 指針指向根元類對象。

理解 objc_object 和 objc_class 的結(jié)構(gòu)及其關(guān)系,有助于深入掌握 Objective-C 的運(yùn)行時(shí)機(jī)制和面向?qū)ο缶幊棠P汀?/p>

拓展

objc_object 結(jié)構(gòu)代表一個(gè) Objective-C 對象,objc_class 結(jié)構(gòu)代表一個(gè)類對象,那么什么結(jié)構(gòu)代表元類對象 ?什么結(jié)構(gòu)代表根元類對象 ?

在 Objective-C 中,類對象和元類對象實(shí)際上使用相同的結(jié)構(gòu)體,即 objc_class 結(jié)構(gòu)體。元類對象是特殊的類對象,用于存儲類方法。當(dāng)一個(gè)類對象調(diào)用類方法時(shí),這個(gè)調(diào)用實(shí)際上是通過它的元類對象實(shí)現(xiàn)的。

類對象、元類對象和根元類對象

類對象:用于存儲實(shí)例方法和實(shí)例變量。元類對象:用于存儲類方法。每個(gè)類對象都有一個(gè)對應(yīng)的元類對象。根元類對象:所有元類的終極元類,通常是 NSObject 的元類。

objc_class 結(jié)構(gòu)體

objc_class 結(jié)構(gòu)體同時(shí)表示類對象和元類對象。以下是 objc_class 結(jié)構(gòu)體的定義:

struct objc_class {

Class isa; // 指向元類對象

Class super_class; // 指向父類對象或父元類對象

const char *name; // 類的名稱

long version; // 類的版本信息

long info; // 類的信息標(biāo)志位

long instance_size; // 實(shí)例的大小

struct objc_ivar_list *ivars; // 成員變量列表

struct objc_method_list **methodLists; // 方法列表數(shù)組

struct objc_cache *cache; // 方法緩存

struct objc_protocol_list *protocols; // 協(xié)議列表

};

類對象和元類對象之間的關(guān)系

每個(gè)類對象都有一個(gè) isa 指針,指向其元類對象。元類對象的 isa 指針指向根元類對象。根元類對象 (通常是 NSObject 的元類) 的 isa 指針指向自己,這構(gòu)成了一個(gè)循環(huán),表示類對象體系的終點(diǎn)。

元類對象和根元類對象的關(guān)系圖

+-------------------+ +-------------------+ +-------------------+

| 實(shí)例對象 | --> | 類對象 | --> | 元類對象 |

+-------------------+ +-------------------+ +-------------------+

| isa -> Class | | isa -> MetaClass | | isa -> RootMetaClass|

+-------------------+ +-------------------+ +-------------------+

| | | super_class | | super_class |

+-------------------+ +-------------------+ +-------------------+

具體的例子

假設(shè)我們有一個(gè)類 MyClass,它繼承自 NSObject,我們可以構(gòu)造以下關(guān)系:

@interface MyClass : NSObject

@end

@implementation MyClass

@end

在內(nèi)存中的關(guān)系可以表示為:

MyClass instance -> MyClass -> MyClass's MetaClass -> NSObject's MetaClass -> NSObject's MetaClass (itself)

代碼示例

下面的代碼展示了如何獲取和打印類對象和元類對象的信息:

#import

#import

@interface MyClass : NSObject

@end

@implementation MyClass

@end

int main(int argc, const char * argv[]) {

@autoreleasepool {

MyClass *obj = [[MyClass alloc] init];

Class objClass = object_getClass(obj); // 獲取類對象

Class objMetaClass = object_getClass(objClass); // 獲取元類對象

Class rootMetaClass = object_getClass(objMetaClass); // 獲取根元類對象

NSLog(@"Instance: %p", obj);

NSLog(@"Class: %p", objClass);

NSLog(@"MetaClass: %p", objMetaClass);

NSLog(@"RootMetaClass: %p", rootMetaClass);

NSLog(@"Instance isa: %p", *(uintptr_t *)obj);

NSLog(@"Class isa: %p", *(uintptr_t *)objClass);

NSLog(@"MetaClass isa: %p", *(uintptr_t *)objMetaClass);

NSLog(@"RootMetaClass isa: %p", *(uintptr_t *)rootMetaClass);

}

return 0;

}

輸出結(jié)果

運(yùn)行上面的代碼,輸出結(jié)果可能如下:

Instance: 0x600003b7a0c0

Class: 0x10f512340

MetaClass: 0x10f512370

RootMetaClass: 0x10f512370

Instance isa: 0x10f512340

Class isa: 0x10f512370

MetaClass isa: 0x10f512370

RootMetaClass isa: 0x10f512370

在這個(gè)示例中,我們看到:

實(shí)例對象的 isa 指針指向類對象。類對象的 isa 指針指向元類對象。元類對象的 isa 指針指向根元類對象。根元類對象的 isa 指針指向自己。

總結(jié)

objc_object:表示一個(gè)實(shí)例對象,包含一個(gè) isa 指針,指向類對象。objc_class:表示一個(gè)類對象,包含 isa 指針、父類指針、方法列表等信息。類對象和元類對象使用相同的結(jié)構(gòu)體。元類對象:也是 objc_class 結(jié)構(gòu)體,isa 指針指向根元類對象。根元類對象:isa 指針指向自己,終結(jié)了類對象體系的循環(huán)。

理解這些結(jié)構(gòu)和關(guān)系對于掌握 Objective-C 運(yùn)行時(shí)的動(dòng)態(tài)特性和面向?qū)ο缶幊棠P头浅V匾?/p>

柚子快報(bào)激活碼778899分享:ios objc

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19504619.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄