Artigo do tipo Tutorial
Recursos especiais neste artigo:
Contém nota Quickupdate, Conteúdo sobre Novidades.
Autores: Alexandre Oliveira e Vitor Granzinoli Vellozo
Novidades do iOS 6
Muitas novidades nessa nova versão, inclusive alguns novos componentes que prometem agilizar o desenvolvimento de aplicativos e jogos, novas maneiras de atualizar a aplicação e mudanças na maneira de se desenvolver. Para discutir o tema, o artigo faz uma breve introdução e, em seguida, apresenta várias novidades da mais nova versão do iOS, explicando os novos componentes e suas funcionalidades e todo o poder que essas novidades agregam à plataforma móvel da Apple.

Em que situação o tema é útil
O tema é útil para todos os desenvolvedores que buscam constante atualização, e que buscam as informações necessárias para agilizar o aprendizado sobre as novidades do iOS.

Após o sucesso da versão 5 do seu sistema operacional para sistemas móveis, a Apple lançou em setembro de 2012 a versão 6 do iOS, acompanhando esta atualização, uma atualização na ferramenta de desenvolvimento Xcode, que inclui o suporte às novidades deste sistema, além de atualizações no SDK e simuladores.

Nesta versão foram adicionadas centenas de novas funcionalidades, correções de bugs e modificações no funcionamento de vários componentes, que para muitos ocorreu de forma brusca, pois o iOS 5 havia sido lançado a cerca de um ano e da mesma forma, incluía uma série de novidades que exigiam tempo para adaptação.

Das novas funcionalidades, iremos falar sobre as mudanças no ambiente de desenvolvimento, detalhando as principais melhorias na ferramenta Xcode, modificações em nível de compilador e os novos componentes visuais como o UICollectionView, que nos permite criar aplicações com o layout similar à aplicação de fotos que acompanha o iPad de uma maneira simplificada.

Como nem tudo são flores, a evolução do sistema operacional nem sempre é feita de maneira transparente para o desenvolvedor, que muitas vezes se vê em uma posição desconfortável de ter que reaprender algo já costumeiro em seu dia a dia, como é o caso do método viewDidUnload, utilizado desde a primeira versão do sistema operacional para liberar recursos quando uma tela é removida da memória, que foi totalmente descartado, não sendo mais necessária a sua implementação. Outra mudança drástica foi a maneira como controlamos a orientação dos dispositivos, que recebeu novos aliados como o Auto Layout (ver Nota do DevMan 1).

Como as mudanças são muitas, iremos mostrar uma visão geral de cada novo componente ou mudança que consideramos importantes, deixando o leitor livre para aprofundar seus estudos na tecnologia que mais lhe interessa. No final do artigo incluímos uma série de referências para os assuntos aqui tratados, que podem servir como ponto inicial para suas pesquisas.

Nota do DevMan 1. Incompatibilidade dos novos componentes com versões anteriores do iOS
É muito importante frisar que a utilização de componentes específicos para iOS 6 fazem com que a exigência mínima do sistema operacional executada seja alterada para a versão seis. Caso o desenvolvedor pretenda suportar versões anteriores do sistema operacional, é necessário que seja feito um tratamento especial nas classes onde tais componentes serão executados, utilizando diretivas de compilador, do contrário a aplicação simplesmente não irá funcionar.

Melhorias no Cocoa Touch

Além de uma nova versão da ferramenta de desenvolvimento Xcode, que incluiu novos simuladores para versão 6 do sistema operacional, outras mudanças ocorreram internamente em nível de compilador e interface. As mudanças se dividem em novos componentes, novas funcionalidades e algumas modificações no funcionamento base de alguns componentes (ver Nota do DevMan 2).

Nota do DevMan 2. O Cocoa Touch
O Cocoa Touch é a camada de mais alto nível para comunicação com o sistema operacional iOS. A mesma segue o padrão de arquitetura MVC (Model-View-Controller) e possui uma série de bibliotecas que facilitam a vida do desenvolvedor como o UIKit, MapKit, Core Data e Core Animation. Uma lista completa das bibliotecas que fazem parte do Cocoa Touch pode ser encontrada nas referencias no final do artigo.

Automatic Synthesize

Uma das regras básicas para utilizarmos uma property é a criação de seu par synthesize, que automaticamente cria os getters e setters necessários para o seu funcionamento. Até então, esta regra não podia ser quebrada, pois o código deixaria de compilar, porém, com o Xcode 4.5, podemos agora esquecer estas declarações de vez, pois o compilador irá se encarregar de inseri-las em tempo de compilação.

Algo que devemos ter em mente é que o acesso a propriedades deve ser feito diretamente pelo seu método self, pois o comando synthesize utilizado manualmente adicionava uma variável de instância com o mesmo nome, permitindo que o acesso fosse feito diretamente pelo nome da variável. Com o automatic synthesize, as variáveis de instância ainda são criadas, porém a sua nomenclatura padrão difere do nome da propriedade, sempre adicionando um underscore na frente de seu nome, o que nos permite ter propriedades com o mesmo nome de parâmetros de métodos, sem receber o famoso aviso “local declaration of ‘sua variável’ hides instance variable”.

O mais interessante é que esta nova funcionalidade é compatível não somente com aplicações que utilizam a última versão do sistema operacional, mas também com versões anteriores. Sendo uma funcionalidade opcional, o único requerimento é a utilização da versão mais recente da ferramenta Xcode.

Na Listagem 1 temos uma comparação entre as duas maneiras de se declarar propriedades, com automatic synthesize e utilizando o synthesize manualmente.

Listagem 1. Comparação entre o synthesize automático e manual.


  @implementation ViewController
   
  @synthesize propertyManual;
   
  // Como o automatic synthesize declara as propriedades.
  // @synthesize propertyAutomica = _propertyAutomatica;
  - (void)viewDidLoad {
      
      [super viewDidLoad];
      propertyManual = @"Property manual acessada pela variável de instância.";
      self.propertyManual = @"Property manual acessada via self.";
      self.propertyAutomatica = @"Property automática acessada via self.";
      _propertyAutomatica = @"Property automática acessada pela 
      variável de instância.";
  }
  @end

O método viewDidUnload

Em versões anteriores, quando uma aplicação recebia o aviso de falta de memória, todos os view controllers não visíveis na tela recebiam uma chamada para o método viewDidUnload, que os removia da memória. Este processo nos permitia liberar recursos que seriam carregados novamente quando a tela fosse aberta, porém, este método foi marcado como deprecated, ou seja, ele não é mais chamado e deve ser removido da implementação.

De acordo com a Apple, este método foi descontinuado, pois na maioria dos casos, descarregar componentes visuais em casos de pouca memória não resolvia de fato o problema.

Com a remoção deste método, a lógica para liberar tais recursos em caso de falta de memória deve ser centralizada no método didReceiveMemoryWarning, porém, não devemos simplesmente mover todo o conteúdo do método viewDidUnload para o método didReceiveMemoryWarning, pois como a view não é mais descarregada da memória, o método viewDidLoad não será chamado novamente e os componentes não serão reinicializados.

Novas maneiras de controlar a orientação

Outra mudança em conceitos básicos foi introduzida nesta versão do iOS, a maneira como é controlada a orientação dos dispositivos, que antes era feita sobrescrevendo o método shouldAutorotateToInterfaceOrientation dentro do viewcontroller, nos permitindo ajustar componentes visuais de acordo com a orientação, ou até mesmo carregar uma tela totalmente diferente. Este método foi descontinuado e a recomendação é utilizar uma nova dupla de métodos para controle de orientação, são eles: shouldAutorotate, que indica se a tela tem suporte a mudança de orientação e supportedInterfaceOrientations, que indica quais orientações são suportadas pelo view controller.

...

Quer ler esse conteúdo completo? Tenha acesso completo