Como introspecção funciona em ios

Introspecção refere-se a instalações em linguagem de programação de aplicativos iOS para examinar a estrutura e outros detalhes de um objeto e sua classe em tempo de execução. Esses detalhes podem incluir:

  • Um objeto&rsquo-s árvore de herança

  • Se estiver em conformidade com um protocolo específico

  • Se ele responde a uma determinada mensagem

Quando você sabe o que um objeto é feito, você pode programaticamente construir mensagens para enviar a ele, o que torna o programa muito mais dinâmico.

Como obter a classe de um objeto

Você pode obter a classe de um objeto em tempo de execução. Na verdade, trata-C Objectivo classes de objectos como de primeira classe. Cada objeto de classe aponta para uma estrutura de dados na memória, tem uma superclasse (conhecido como metaclass), E pode responder às mensagens que invocam métodos.

Quando você chamar um método de classe, você está realmente enviando uma mensagem para o objeto da classe.

Você pode obter uma referência ao objeto de classe para a classe enviando a classe uma mensagem de classe (Boy! Isso foi confuso para escrever.), E você começa a superclasse de uma classe enviando o objeto uma mensagem superclasse. Por exemplo, você pode imprimir a classe e a superclasse de um objeto, como um objeto StackOfInteger, como segue:

StackOfInteger * aStack = [[StackOfInteger alloc] Init] -NSLog (@"Classe é% @, e super é% @.", [Classe aStack], [aStack superclasse]) -

Como chamar dinamicamente métodos



Você pode então chamar um método em um objeto de classe como esta:

Classe postfixCalculatorClass = [classe someObject] - [postfixCalculatorClass performSelector: @selector (printClassDescription)] -

Dois itens precisam ser explicados aqui. Primeiro, o @selector é um compilar-directiva sobre o tempo e retorna um ponteiro para o método printClass. Em segundo lugar, você pode usar performSelector para realmente chamar esse método.

No exemplo anterior, o nome do método foi traduzido para um apontador para o método em tempo de compilação. Você também pode chamar um método de instância em um objeto usando o nome de cadeia de um método, em tempo de execução, como segue:

SEL printClassDescriptionSEL = NSSelectorFromString (@"printClassDescription") - [postfixCalculatorClass performSelector: printClassDescriptionSEL] -

Neste exemplo, é possível utilizar o tipo SEL (também conhecido como um selector em Objective-C linguagem, e assim o SEL) para armazenar a representação interna de um método.

Como verificar a especificação de um objeto

Depois de ter um identificador para um objeto de classe, você pode inspecioná-lo em tempo de execução usando as funções de introspecção fornecidos em Objective-C. Por exemplo, você pode testar esse objeto para ver que tipo é. Você pode inspecioná-lo para ver se ele tem um determinado método ou um determinado atributo, e assim por diante.

A tabela a seguir mostra todos os métodos para testar a estrutura e as capacidades de um objecto de classe e para a realização de acções sobre ele.

MétodoPergunta ou Ação
-(BOOL) IsKindOf: classe-objetoÉ o objeto um membro ou descendente de uma classe?
-(BOOL) isMemberOf: classe-objetoÉ o objeto de um membro de uma classe?
-(BOOL) respondsTo: selectorPode o objeto responder a um método?
+(BOOL) instancesRespondTo: selectorinstâncias da classe pode responder a uma mensagem?
-(Id) executar: selectorAplicar o método especificado pelo selector.
+(BOOL) conformsToProtocol: (Protocolo *)aProtocolSIM, se o receptor está em conformidade com o protocolo aProtocol- de outra forma, NO.

Para mais detalhes sobre a introspecção e como usá-lo, confira o Apple iOS Runtime Referência e a Guia de Programação Apple Developer Objective-C Runtime.


Publicações relacionadas