NSObject isa

title: NSObject isa
NSObject isa 에 대한 이해 가 좋 지 않 았 습 니 다. 큰 소 가 쓴 블 로 그 를 보고 많은 이 해 를 했 습 니 다. 여기 서 학습 성 과 를 기록 하여 나중에 보기 편 합 니 다.블 로그 주소http://xiongzenghuidegithub.github.io/blog/2016/05/17/runtime-part7-object-getclass-yu-object-class-de-qu-bie/
isa 지향: 대상 isa - > 클래스, 클래스 isa - > 원류, 원류 isa - > 뿌리 원류, 뿌리 원류 isa - > 뿌리 원류 자신, 회로 슈퍼 class: 대상 슈퍼 class 지향 대상 슈퍼 class.원류 슈퍼 클래스 는 슈퍼 클래스 부 류 를 가리킨다.루트 메타 루트 클래스 지향 클래스 NSObject

     //   
     @interface NSObject  {
     Class isa  OBJC_ISA_AVAILABILITY; //    
     }
     
     //  
     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;
     
     //   
     struct objc_class {
     Class isa  OBJC_ISA_AVAILABILITY; //   root  
     
     #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;
     
     // root  
     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;
     
    Person *person = [[Person alloc] init];
    NSLog(@"person class:%p", [person class]); //      objc_class   
    NSLog(@"person meta class:%p", object_getClass(person)); //      objc_class   
    NSLog(@"person meta class:%p", [Person class]); //       objc_class   
    NSLog(@"person meta class:%p", object_getClass([person class])); //       objc_class    

좋은 웹페이지 즐겨찾기