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:
Conteúdo
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étodo | Pergunta 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: selector | Pode o objeto responder a um método? |
+(BOOL) instancesRespondTo: selector | instâncias da classe pode responder a uma mensagem? |
-(Id) executar: selector | Aplicar o método especificado pelo selector. |
+(BOOL) conformsToProtocol: (Protocolo *)aProtocol | SIM, 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.