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 ?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.
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
Relativamente a
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. )
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.