Classe de compreensão do Objecttc

em objc.h, existe definição para a classe

typedef struct objc_class *Class;

typedef struct objc_object {

  Class isa;
} *id;

Caso: usar a classe no NSObject:

/*************** Basic protocols  ***************/

@protocol NSObject

- (BOOL)isEqual:(id)object;
- (NSUInteger)hash;

- (Class)superclass;
- (Class)class;
- (id)self;

difícil de entender, então classe é apenas Estrutura, não Classe real como NSObject etc.

Qual é o verdadeiro propósito da classe ?

Author: Phil Ross, 2010-06-29

4 answers

Todos os comportamentos dinâmicos do tempo de execução Objectivo-C estão disponíveis por causa da classe Class. Não é uma aula que alguma vez subclasse ou implemente. O tempo de execução preenche metadados sobre a sua classe que podem ser acedidos para introspecção ou modificação.

Linguagens como C++ e até Java têm suporte muito limitado para este tipo de coisas. Objective-C está mais perto das linguagens de scripts Ruby ou Python a este respeito. Você pode realmente substituir os métodos de instância em classes existentes com sua própria implementação em tempo de execução e afetar a classe de outras maneiras que a maioria das linguagens compiladas simplesmente não pode tocar.

 0
Author: Paul, 2010-06-29 13:02:24
Acho que estás no caminho errado.

O ficheiro de cabeçalho deve ficar assim:

#import <Foundation/NSObject.h>

@interface Fraction: NSObject {
    int numerator;
}

-(void) print;
@end

E a execução (.m file) assim

#import "Fraction.h"
#import <stdio.h>

@implementation Fraction
-(void) print {
    printf( "%i", numerator );
}
@end

Origem

Relativamente a

 0
Author: HerrVoennchen, 2010-06-29 09:04:40

No Objective-C, As classes são " objectos de primeira classe ". Eles são essenciais na verificação do tipo de execução, por exemplo, para verificar se um objeto é uma cadeia de caracteres que você pode usar

[obj isKindOfClass:[NSString class]];

-isKindOfClass: precisa aceitar uma classe Objective-C como um parâmetro, e Class é uma representação dela.

(raramente necessita de se importar com as definições de tipo em objc.h a menos que precise de manipular o tempo de execução Objectivo-C abaixo do nível de API C. )

 0
Author: kennytm, 2010-06-29 09:09:27

A classe permite que o sistema de tempo de execução Objective-C Saiba onde procurar tabelas de métodos (e variáveis de instância, etc.). Em particular, quando você escreve

[self foo: bar];

O sistema de tempo de execução chama

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

E depois usa o tipo do self para encontrar a classe certa para encontrar a tabela de métodos apropriada para encontrar a implementação correspondente à mensagem foo:. E depois passa-a.

 0
Author: Frank Shearar, 2010-06-29 12:49:53