Desenvolvimento - Mobile (MS)

Utilizando Threads no iOS

Veja neste artigo o que são Threads. Threads são usadas para que a execução de dois ou mais processos ocorram simultâneamente, e hoje veremos como podemos implementar threads na plataforma iOS.

por Bruno Henrique Zulzke



Threads são usadas para que a execução de dois ou mais processos ocorramsimultaneamente, e hoje veremos como podemos implementar threads na plataforma iOS.

Em nosso exemplo vamos carregar um imageView com uma imagem da internet passando apenas sua URL, para que o efeito fiquei bem visível, peguei uma imagem bem grande, acima de 2MB.

Mãos a obra, inicie um projeto do tipo View-based Application e dê o nome deEstudoThread.

No arquivo de interface (ThreadViewController.xib), coloque um Button, um ActivityIndicator View, um slider e uma imageView, ficando da seguinte maneira:

http://www.brunoz.com.br/wp-content/uploads/2012/01/Screen-Shot-2012-01-13-at-2.42.47-PM1.png

No arquivo ThreadViewController.h, crio os seguintes Outlets e Actions:

@interface ThreadViewController : UIViewController{
IBOutlet UIImageView *imageView;
IBOutlet UIActivityIndicatorView *loading;
}

-(IBAction)loadImage:(id)sender;

@end

O passo seguinte é implementar esse método loadImage, então vamos abrir o arquivo ThreadViewController.m e adicionar o trecho de código a seguir:

-(void)loadImage:(id)sender{
[loading startAnimating];
NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://gamehall.uol.com.br/galerias/_cinehall_kingkong/kong_iup2.jpg"]];
[imageView setImage:[UIImage imageWithData:data]];
[loading stopAnimating];
}

Faça as devidas conexões dos objetos com os Outlets e Actions criadas e rode a aplicação para ver o resultado.

A imagem deve ter sido carregada certo? porém se você reparar, enquanto a imagem está sendo carregada a tela fica travada, para testar isso, tente mexer no slider após clicar em “Carregar Imagem”, ele não irá se mexer.

Isso ocorre, pois ainda não estamos usando as Threads e enquanto ele não terminar de processar o carregamento da imagem, nada é liberado para uso.

Dependendo do tempo que demorar o carregamento, pode passar a imprenssão ao usuário que sua app travou, então para melhorarmos isso vamos implementar a Thread.

Para aplicar a Thread, adicionei mais um método (downloadImage) e alterei o loadImage, ficando assim:

-(void)loadImage:(id)sender{
[loading startAnimating];
[self performSelectorInBackground:@selector(downloadImage) withObject:nil];
}

-(void)downloadImage{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSData *data = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://gamehall.uol.com.br/galerias/_cinehall_kingkong/kong_iup2.jpg"]];
[imageView setImage:[UIImage imageWithData:data]];
[loading stopAnimating];
[pool release];
}

Não se esqueça de declarar esse novo método no arquivo ThreadViewController.h

Roda sua aplicação e veja que agora enquanto sua imagem é carregada, a tela fica liberar para o usuário navegar.

Até a Próxima!

Bruno Henrique Zulzke

Bruno Henrique Zulzke - Analista de Sistemas na Spring Wireless. Formado em Desenvolvimento de Aplicações para Internet na FIT (Faculdade Impacta de Tecnologia), atua no mercado de TI desde 2004 e atualmente é focado em desenvolvimento de aplicações para dispositivos móveis nas plataformas Android, iOS e J2ME.