Desenvolvimento

19 set, 2012

Entendendo o processo de introspecção no iOS

Publicidade

A “introspection”, ou melhor dizendo, instrospecção é a capacidade de obtermos informações ou cadeias de objetos relacionados dentro de um grupo. Iremos ver como isso funciona no iOS. Normalmente, esse tipo de ação é utilizada para ler, manipular ou até mesmo desalocar o objeto nestes eventos da programação.

Vou relacionar abaixo uma lista de métodos documentados pela Apple Developer Program:

  • -(BOOL)isKindOfClass:classType
    Is the object a member of that class or a subclass?
  • -(BOOL)isMemberOfClass:classType
    Is the object a member of that class?
  • -(BOOL)respondsToSelector:aSelector
    Does an object (class or instance) respond to the selector’s method?
  • +(BOOL)instancesRespondToSelector:aSelector
    Do instances of the class respond to the selector’s method?
  • +(BOOL)isSubclassOfClass:classType
    Is this class a subclass of the specified class?
  • -(id)performSelector:aSelector
    Ask the class to perform the method specified by the selector, returning whatever the method is intended to return.
  • -(id)performSelector:aSelector withObject:someObject
    Performs the selector, passing in someObject as the first (and hopefully only) argument, returning whatever the method is designed to return.
  • -(id)performSelector:aSelector withObject:someObject withObject:anotherObject
    Perform the selector, passing in the two arguments in that order to the (assumed) two parameters defined by the selector, returning whatever the method is designed to return.


Figura. 01 – iOs Developer Library – Cocoa Core Competencies

Irei exemplificar algumas formas de visualizar todo esse processo de introspecção. Vou demonstrar utilizando o “Label” e o “Button” no projeto de exemplo que vamos criar.

Iremos criar um simples App para entendermos o funcionamento deste processo.

O nome do produto e o company identifier fica a seu critério. Eu selecionei a família de dispositivo iPhone e estou utilizando Storyboard e ARC. Para aqueles que ainda não se familiarizaram com o Storyboard, num próximo artigo irei falar somente dele. Depois de criado o projeto, vamos ao que interessa!

Iremos adicionar em nossa interface uma View a mais, quatro botões e cinco label’s para que possamos entender a idéia. Abaixo segue um “screenshot” de como irá ficar nossa tela no App.

Depois de montado todo o visual de nosso App, iremos partir para a codificação e ligação dos botões criados.

Em nosso arquivo “ViewController.h” temos os seguintes dados:

#import 

@interface ViewController : UIViewController

- (IBAction)btn01:(UIButton *)sender;
- (IBAction)btn02:(UIButton *)sender;
- (IBAction)btn03:(UIButton *)sender;
- (IBAction)btn04:(UIButton *)sender;

@end

São declarados todos os botões que estamos utilizando nas ligações, conforme imagem anterior de interface.

No arquivo “ViewController.m” teremos os seguintes métodos implementados:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (IBAction)btn01:(UIButton *)sender
{
for (UIView *aView in self.view.subviews) {
if ([aView isMemberOfClass:[UILabel class]]) {
aView.backgroundColor = [UIColor redColor];
}
}
}

- (IBAction)btn02:(UIButton *)sender
{
for (UIView *aView in self.view.subviews) {
if ([aView isKindOfClass:[UIView class]]) {
aView.backgroundColor = [UIColor blueColor];
}
}
}

- (IBAction)btn03:(UIButton *)sender
{
for (id aView in self.view.subviews) {
if ([aView canPerformAction:@selector(setText:) withSender:sender]) {
[aView setText:@"Introspection iOS"];
[aView setBackgroundColor:[UIColor blueColor]];
[aView setTextColor:[UIColor whiteColor]];
}
}
}

- (IBAction)btn04:(UIButton *)sender
{
for (UIView *aView in self.view.subviews) {
if ([aView isMemberOfClass:[UIView class]]) {
for (UILabel *aLabel in aView.subviews) {
aLabel.backgroundColor = [UIColor greenColor];
}
}
}
}

Depois de declarado os métodos no arquivo .H, basta efetuar as ligações e iniciar os testes.

Iniciando o processo de testes, veremos que cada botão irá efetuar ações diferentes para os objetos relacionados em tela. Esse processo somente é possível devido ao fato de utilizarmos a introspecção. O processo que utilizamos torna possível a manipulação dos objetos integrados. Em nossos dia-a-dia de desenvolvimento, isso torna melhor nossa forma de manipular objetos que são utilizados em tempo de execução.

O Core Foundation permite uma variedade de introspecção, principalmente para fins de depuração e manipulação. Veja com mais detalhes nas documentações em “Apple Developer Program”, no qual são discutidos de forma ampla sobre o assunto.

Espero ter contribuído um pouco mais com nosso artigo. Como disse anteriormente, iremos abordar um pouco mais sobre “StoryBoard”. Te vejo no próximo artigo, obrigado!

Referência: