国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

objc中類方法里的self指的是什么

2019-11-14 19:49:53
字體:
來源:轉載
供稿:網友

所有轉出“博客園”,請您注明出處:http://m.survivalescaperooms.com/xiaobajiu/p/4121431.html

objc中類方法里的self指的是什么

  在objc中是可以在類方法中使用self這個關鍵字的,這一點和其他語言比較比較詭異,因為很容易導致混淆和失誤。而一般在對象方法中使用self/this這個關鍵字往往指的是當前對象。那么在objc中的類方法中的self指的是什么呢,請看下面一段進行測試的代碼:

#import <Foundation/Foundation.h>@interface MyClass : NSObject@end@implementation MyClass+ (void)show{    Class p1= self;    Class p2= [MyClass class];    NSString *re= p1==p2?@"YES":@"NO";    NSLog(@"%@",re);}@endint main(int argc, const char * argv[]){    @autoreleasepool {        [MyClass show];        //得到結果為YES    }    return 0;}

  通過以上代碼可以得到以下信息:

  類方法中self是一個Class,而Class 是一個指向 objc_class 結構體類型的指針。objc_class就是Objective-C的類。它定義如下:

typedef struct objc_class *Class;struct objc_object {    Class isa  OBJC_ISA_AVAILABILITY;};

  可以發現Class給我們的是一個叫做isa的指針,那么isa是什么呢?繼續查看Objective-C的類結構

struct objc_class {    Class isa  OBJC_ISA_AVAILABILITY;#if !__OBJC2__    Class super_class                                        OBJC2_UNAVAILABLE;    const char *name                                         OBJC2_UNAVAILABLE;    long version                                             OBJC2_UNAVAILABLE;    long info                                                OBJC2_UNAVAILABLE;    long instance_size                                       OBJC2_UNAVAILABLE;    struct objc_ivar_list *ivars                             OBJC2_UNAVAILABLE;    struct objc_method_list **methodLists                    OBJC2_UNAVAILABLE;    struct objc_cache *cache                                 OBJC2_UNAVAILABLE;    struct objc_PRotocol_list *protocols                     OBJC2_UNAVAILABLE;#endif} OBJC2_UNAVAILABLE;

  可以發現isa指針指向類的“元類”(metaclass),類型也是一個對象,我更喜歡把它叫做類型對象與之相對的就是熟悉的實例對象。正如對象可以接收的信息由類定義一樣,類需要的信息就是由“元類”定義。值得指明的是Objective-C類也是對象。千萬不要把isa和super_class弄混淆了。元類只跟發往類的消息有關,跟類的實例沒有關系。可以觀察到instance_size這樣的信息,它定義了類的實例的尺寸,當實例化一個類的時候它就負責確保足夠的內存空間。

  那么我們也清楚了類方法中的self是什么了,它等價于調用[類 Class],Class又返回給我們isa指針,isa是指向類型對象的。類型對象是這個的信息它只有一份。可以得到結論:類方法中的self是當前類的類型對象

歡迎各位朋友指正錯誤,以免誤人子弟。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望城县| 江达县| 余干县| 遵义市| 天津市| 京山县| 长海县| 蒙自县| 米泉市| 六安市| 岢岚县| 昌吉市| 辉县市| 洪洞县| 新建县| 闽侯县| 堆龙德庆县| 开化县| 芜湖市| 台北县| 年辖:市辖区| 鱼台县| 富阳市| 南郑县| 湘潭市| 鄯善县| 永仁县| 白山市| 堆龙德庆县| 精河县| 北安市| 海安县| 西峡县| 金川县| 合阳县| 合川市| 湛江市| 金门县| 哈密市| 时尚| 射洪县|