代码之家  ›  专栏  ›  技术社区  ›  Forrest

理解ObjectC中的类

  •  1
  • Forrest  · 技术社区  · 16 年前

    在objc.h中,有类的定义

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

    案例:在NSObject中使用类:

    /*************** Basic protocols  ***************/
    
    @protocol NSObject
    
    - (BOOL)isEqual:(id)object;
    - (NSUInteger)hash;
    
    - (Class)superclass;
    - (Class)class;
    - (id)self;
    

    很难理解,所以类只是结构,而不是像NSObject等真正的类。

    上课的真正目的是什么?

    4 回复  |  直到 16 年前
        1
  •  0
  •   Paul    16 年前

    Objective-C运行时的所有动态行为都是可用的,因为 Class 班级。它不是一个你将永远子类化或实现的类。运行时将填充有关类的元数据,这些元数据可用于内省或修改。

        2
  •  0
  •   HerrVoennchen    16 年前

    我想你走错路了。

    #import <Foundation/NSObject.h>
    
    @interface Fraction: NSObject {
        int numerator;
    }
    
    -(void) print;
    @end
    

    实现(.m文件)如下

    #import "Fraction.h"
    #import <stdio.h>
    
    @implementation Fraction
    -(void) print {
        printf( "%i", numerator );
    }
    @end
    

    source

    当做

        3
  •  0
  •   kennytm    16 年前

    在Objective-C中,类是“ first-class objects ". 它们在运行时类型检查中非常重要,例如检查对象是否是可以使用的字符串

    [obj isKindOfClass:[NSString class]];
    

    -isKindOfClass: Class 是它的一种表现。

    objc.h 除非您需要在C API级别以下操作Objective-C运行时。)

        4
  •  0
  •   Frank Shearar    16 年前

    [self foo: bar];
    

    运行时系统调用

    objc_msgSend(self, @selector(foo:), bar);
    

    然后使用self的类型找到合适的类,找到合适的方法表,找到对应的实现 foo: 信息。然后运行它。