Você está na página 1de 30

Objective-C

Fundamental
Christopher K. Fairbairn
Johannes Fahrenkrug
Collin Ruffenach

Novatec

Original English language edition published by Manning Publications Co., Copyright 2011 by Manning Publications. Portuguese-language edition for Brazil. All rights reserved.
Edio original em ingls publicada pela Manning Publications Co., Copyright 2011 pela Manning Publications.
Edio em portugus para o Brasil. Todos os direitos reservados.
Novatec Editora Ltda. 2012.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta obra, mesmo
parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora.
Editor: Rubens Prates
Traduo: Rafael Zanolli
Reviso tcnica: Edgard Damiani
Reviso gramatical: Marta Almeida de S
Editorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-291-1
Histrico de impresses:
Maro/2012

Primeira edio

Novatec Editora Ltda.


Rua Lus Antnio dos Santos 110
02460-000 So Paulo, SP Brasil
Tel.: +55 11 2959-6529
Fax: +55 11 2950-8869
E-mail: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec

Dados

Internacionais de Catalogao na Publicao


(Cmara Brasileira do Livro, SP, Brasil)
Fairbairn, Christopher K.
Objective-C fundamental / Christopher K.
Fairbairn, Johannes Fahrenkrug, Collin
Ruffenach ; [traduo Rafael Zanolli]. -- So
Paulo : Novatec Editora ; London, NY : Manning
Publications, 2012.
Ttulo original: Objective-C fundamentals
ISBN 978-85-7522-291-1 (Novatec)
1. iPhone (Smartphone) - Programao 2.
Objective-C (Linguagem de programa para
computadores) I. Fahrenkrug, Johannes. II.
Ruffenach, Collin. III. Ttulo.

12-01472

CDD-005.117
ndices para catlogo sistemtico:
1. Objective-C : Linguagem de programas para
computadores : Processamento de dados
005.117
VC20120316

(CIP)

captulo 1

Criao de seu primeiro aplicativo iOS

Este captulo aborda


A compreenso do ambiente de desenvolvimento iOS
O uso do Xcode e do Interface Builder
A construo de seu primeiro aplicativo

Como um desenvolvedor que est dando seus primeiros passos na plataforma iOS,
voc ter de aprender muitas novas tecnologias e novos conceitos em um curto intervalo de tempo. No peloto de frente dessa sobrecarga de informaes encontra-se
um conjunto de ferramentas de desenvolvimento com as quais voc talvez no esteja
familiarizado e uma linguagem de programao moldada por um grupo de empresas
e eventos histricos nicos.
Aplicativos iOS costumam ser desenvolvidos em uma linguagem de programao
chamada Objective-C e recebem suporte de uma biblioteca chamada Cocoa Touch. Caso voc j tenha desenvolvido aplicativos Mac OS X, deve estar habituado
aos primos dessas tecnologias no ambiente desktop. Ainda assim, importante
notar que as verses iOS dessas ferramentas no fornecem exatamente as mesmas
capacidades das verses desktop, sendo importante que voc conhea as restries,
limitaes e melhorias oferecidas para dispositivos mveis. Em alguns casos, voc
poder at precisar desaprender algumas das prticas habituais que costuma utilizar
no ambiente desktop.
Para desenvolver aplicativos iOS, grande parte de seu trabalho ser feito em um
aplicativo chamado Xcode. O Xcode 4, verso mais recente do IDE, traz o Interface
Builder (para criao da interface do usurio) integrado diretamente nele. O Xcode
4 permite que voc crie, gerencie, implemente e depure seus aplicativos durante
todo o ciclo de vida de desenvolvimento do software. Quando voc estiver criando
um aplicativo que oferea suporte a mais de um tipo de dispositivo iOS, poder ser
necessrio apresentar interfaces de usurio levemente diferentes para tipos especficos de dispositivos, ainda que a mesma lgica subjacente seja utilizada em todas as
18

Captulo 1 Criao de seu primeiro aplicativo iOS

19

variantes. Ficar mais fcil obter esse resultado se voc estiver utilizando o conceito
de separao modelo-viso-controlador, algo em que o Xcode 4 pode ajud-lo.
Este captulo aborda os passos necessrios para que voc possa utilizar essas ferramentas e criar um pequeno jogo para iPhone; mesmo assim, antes de mergulhar
diretamente no processo tcnico, vamos discutir o histrico das ferramentas de
desenvolvimento iOS e algumas das formas pelas quais o desenvolvimento mvel se
diferencia do desenvolvimento de aplicativos desktop e web.

1.1 Apresentao das ferramentas de desenvolvimento iOS


Objective-C um superconjunto estrito da linguagem C, uma linguagem de programao baseada em procedimentos. Isso significa que qualquer programa vlido em
C ser tambm vlido em Objective-C (ainda que no utilize as melhorias oferecidas
por essa linguagem).
Objective-C estende a linguagem C oferecendo recursos orientados a objetos. O modelo de programao orientada a objetos tem por base o envio de mensagens a objetos,
diferente do modelo utilizado em C++ e Java, que chama mtodos diretamente em
um objeto. Essa diferena sutil tambm uma das caractersticas vitais que possibilitam muitos dos recursos presentes em Objective-C e que so mais habitualmente
encontrados em linguagens dinmicas como Ruby e Python.
Uma linguagem de programao, entretanto, depende em grande parte dos recursos
oferecidos por suas bibliotecas de suporte. Objective-C fornece uma sintaxe que
permite a implementao de lgica condicional e criao de loops, mas no oferece suporte inerente interao com o usurio, ao acesso de recursos em rede ou
leitura de arquivos. Para facilitar esse tipo de funcionalidade sem que tenhamos de
implement-la do zero em cada aplicativo, a Apple incluiu no SDK um conjunto de
bibliotecas de suporte conhecidas coletivamente como Cocoa Touch. Se voc for um
desenvolvedor Java ou .NET, pode imaginar a biblioteca Cocoa Touch como semelhante Java Class Library ou s Base Class Libraries (BCL) em .NET.

1.1.1 Adaptao dos frameworks Cocoa a dispositivos mveis


A Cocoa Touch formada por diversos frameworks (habitualmente chamados de kits).
Um framework uma coleo de classes agrupadas com um propsito ou uma tarefa
comum. Os dois principais frameworks que utilizamos em aplicativos iPhone so o
Foundation Kit e o UIKit. O Foundation Kit uma coleo de classes no-grficas
de sistema que consiste em estruturas de dados, recursos de rede, entrada e sada de
arquivos, data, hora e funes de tratamento de strings. O UIKit um framework
projetado para auxiliar no desenvolvimento de GUIs com animaes elaboradas.

20

Objective-C Fundamental

A Cocoa Touch tem por base os frameworks Cocoa existentes, utilizados no desenvolvimento de aplicativos desktop para Mac OS X. Porm, em vez de fazer da Cocoa
Touch uma converso literal para dispositivos mveis, a Apple otimizou os frameworks
para aplicativos iPhone e iPod Touch. Nos casos em que considerou que melhorias de
funcionalidade, desempenho ou experincia de usurio poderiam ser obtidas, a Apple
substituiu por inteiro alguns frameworks Cocoa. O UIKit, por exemplo, substituiu
o framework desktop AppKit.
O ambiente de tempo de execuo de software para aplicativos iOS nativos pode ser
visto na figura 1.1. Se substituirmos iOS por Mac OS X no campo da base e alguns
dos frameworks na camada da Cocoa, veremos que se trata essencialmente da mesma
pilha de software que encontramos em aplicativos desktop.
Aplicativo do usurio

APIs
baseadas
em C
Objective-C runtime

Figura 1.1 Ambiente em tempo de execuo de software para aplicativos iOS, mostrando o sistema
operacional, o tempo de execuo da linguagem Objective-C e as camadas do framework Cocoa Touch.

Ainda que os frameworks Cocoa Touch sejam APIs baseadas em Objective-C, a


plataforma de desenvolvimento iOS tambm permite que voc acesse APIs bsicas
baseadas em C. A capacidade de reutilizar bibliotecas C (ou C++) em seus aplicativos Objective-C muito valiosa, pois permite que voc reutilize cdigos que talvez
tenham sido desenvolvidos para outras plataformas mveis, alm de possibilitar o
uso de vrias bibliotecas de cdigo aberto poderosas (desde que suas licenas permitam), o que significa que, em muitos casos, voc no ter de reinventar a roda.
Como exemplo, uma rpida pesquisa no Google pode nos mostrar vrios exemplos
de cdigos-fonte em C que implementam recursos de realidade aumentada, anlise
de imagem e deteco de cdigos de barra, apenas para citar algumas possibilidades,
sendo que todas podem ser utilizadas diretamente por seu aplicativo Objective-C.

21

Captulo 1 Criao de seu primeiro aplicativo iOS

1.2 Ajuste suas expectativas


Por se tratar de um ambiente de desenvolvimento familiar a desenvolvedores Mac
OS X, voc pode pensar erroneamente que o iPhone apenas mais um dispositivo de
computao porttil, assim como um velho laptop, tablet ou netbook. Isso no poderia
estar mais distante da realidade. Um iPhone tem capacidade maior do que um simples
celular, mas menor do que um PC desktop padro. Como dispositivo computacional,
ele se encaixa em um nicho de mercado semelhante quele em que encontramos os
netbooks, sendo mais indicado para casos de uso dirio, em situaes e ambientes
diferentes, do que para perodos prolongados de utilizao em sesses nicas.

1.2.1 Uma pesquisa de hardware feita em meados de 2011


Em uma primeira anlise do iPhone 4, voc certamente notar a tela de 3,5 polegadas
e 960 x 640 pixels que domina praticamente por inteiro a face frontal do dispositivo.
O tamanho geral da tela e o fato de que seus recursos de toque so a nica forma de
interao com o dispositivo fazem essa caracterstica ter ramificaes importantes no
design de seus aplicativos. Ainda que a resoluo de 960 x 640 pixels seja maior do
que a que temos em muitos celulares, provavelmente no ser interessante visualizar,
nessa tela, uma planilha de 300 colunas por 900 linhas.
Como exemplo do tipo de especificao de hardware que voc deve esperar, a tabela
1.1 destaca as especificaes dos modelos mais comuns de iPhone, iPod Touch e iPad
disponveis em meados de 2010. No geral, as especificaes de hardware ficam alguns
anos aqum daquelas dos PCs desktop, mas o nmero de acessrios de hardware
integrados que seus aplicativos podem utilizar (como cmeras, Bluetooth e GPS)
substancialmente maior.
Tabela 1.1 Comparao das especificaes do hardware de diversos dispositivos iPhone e
iPod Touch
Recurso

iPhone 3G

iPhone 3GS

iPhone 4

iPad

RAM

128 MB

256 MB

512 MB

256 MB

Flash

816 GB

1632 GB

1632 GB

1664 GB

Processador

412 MHz ARM11

600 MHz ARM Crtex

Celular

3,6 Mbps

7,2 Mbps

Wi-Fi

Sim

Sim

Cmera

2 MP

3 MP AF

Bluetooth

Sim

Sim

GPS

Sim (sem bssola) Sim

iPad2
512 MB

1664 GB
1 GHz dual-core
1 GHz Apple A4
1 GHz Apple A4
Apple A5
7,2 Mbps
7,2 Mbps
7,2 Mbps
(opcional)
(opcional)
Sim
Sim
Sim
0.92 MP (traseira)
5 MP AF (traseira)

0.3 MP (frontal)
0.3 MP (frontal)

Sim
Sim
Sim (modelos Sim (modelos 3G

3G apenas)
apenas)

22

Objective-C Fundamental

Ainda que seja interessante conhecer as capacidades de hardware e as especificaes


de cada dispositivo, desenvolvedores geralmente no devem se preocupar exageradamente com esses detalhes. medida que a plataforma iOS amadurece e evolui, novos
modelos so lanados, e pode ser difcil se manter atualizado em relao a todas as
variaes possveis.
Em vez disso, procure criar um aplicativo capaz de se adaptar, em tempo de execuo,
ao dispositivo especfico em que ele est sendo executado. Sempre que voc tiver de
utilizar um recurso presente apenas em um subgrupo de dispositivos, teste explicitamente a presena desse recurso e prepare alternativas programticas para quando
ele no estiver disponvel. Por exemplo, para determinar se h uma cmera presente,
em vez de verificar se o seu aplicativo est sendo executado em um iPhone, melhor
verificar diretamente se a cmera est disponvel, uma vez que, agora, alguns novos
modelos de iPad j vm com esse recurso.

1.2.2 Prepare seu aplicativo para quando uma conexo de rede no estiver disponvel
Na era de computao em nuvem em que vivemos, muitos aplicativos iOS tm de
estar sempre conectados Internet. A plataforma iOS oferece duas formas principais
de conectividade wireless: por rea local, com Wi-Fi 802.11, e por rea de cobertura,
empregando diversos padres de dados utilizados em celulares. As escolhas de conexo variam muito em velocidade, indo de 300 kilobits a 54 megabits por segundo.
Tambm possvel que a conexo desaparea por completo, como quando o usurio
pe o dispositivo em modo de voo, desabilita o roaming durante viagens ou entra
em um elevador ou em um tnel.
Diferentemente do ambiente desktop, no qual a maioria dos desenvolvedores simplesmente presume a disponibilidade de uma conexo de rede, bons aplicativos iOS
devem ser projetados para que possam se adaptar falta da rede por longos intervalos
de tempo ou mesmo a situaes em que a conexo desfeita de modo inesperado. A
pior experincia de usurio para seus clientes ser receber uma mensagem de erro
do tipo no foi possvel se conectar ao servidor quando eles estiverem atrasados
para uma reunio ou quiserem acessar informaes importantes que no exigem
obrigatoriamente uma conexo de rede.
Em geral, importante que voc esteja sempre ciente do ambiente em que seu aplicativo iOS est sendo executado. Suas tcnicas de desenvolvimento devem considerar
no apenas as limitaes de memria e processamento do dispositivo, mas tambm
a forma como o usurio interage com seu aplicativo.
Com isso, podemos dizer que j vimos informaes bsicas suficientes. Agora, vamos
mergulhar direto na criao de um aplicativo iOS!

Captulo 1 Criao de seu primeiro aplicativo iOS

23

1.3 Uso do Xcode para desenvolver um jogo simples de cara ou coroa


Ainda que voc possa ter ideias grandiosas para o prximo sucesso da App Store,
vamos iniciar nosso desenvolvimento com um aplicativo relativamente simples, que
poder ser acompanhado com facilidade, sem que voc fique preso a muitos detalhes
tcnicos, e que nos permita ter contato com os recursos exclusivos das ferramentas de
desenvolvimento que utilizaremos. No decorrer deste livro, analisaremos mais detalhadamente os pontos especficos que veremos a seguir. Por enquanto, nossa nfase
estar no entendimento do processo geral e no nas especificidades de cada tcnica.
O aplicativo que desenvolveremos ser um jogo simples que simula um sorteio de
cara ou coroa, como aqueles que costumamos ver quando as pessoas tm de tomar
uma deciso ou no sorteio do incio de uma disputa esportiva. A interface de usurio
desse projeto pode ser vista na figura 1.2. Ela formada por dois botes, Heads (cara)
e Tails (coroa). Utilizando esses botes, o usurio pode iniciar um novo sorteio e
escolher sua opo. O iPhone simular o sorteio e atualizar a tela para indicar se o
usurio acertou na escolha. Nosso jogo ser chamado Coin Toss (Cara ou Coroa).

Figura 1.2 Coin Toss, o jogo que utilizaremos como exemplo.

No desenvolvimento desse jogo, a primeira ferramenta que devemos estudar o Xcode.

24

Objective-C Fundamental

1.3.1 Apresentao do Xcode o IDE da Apple


Como mencionamos antes, o Xcode um IDE que oferece um extenso conjunto
de recursos para que voc gerencie todo o ciclo de vida de seu projeto de desenvolvimento de software. Criar seu projeto inicial, definir sua classe ou seu modelo de
dados, editar o cdigo-fonte, compilar seu aplicativo e, finalmente, depurar e ajustar
seu desempenho so todas tarefas que o Xcode pode realizar.
O Xcode se baseia em vrias ferramentas de cdigo-aberto, como LLVM (Low-Level
Virtual Machine, de cdigo-aberto), GCC (compilador GNU), GDB (depurador GNU)
e DTrace (ferramenta de instrumentao e criao de perfis, da Sun Microsystems).

1.3.2 Como iniciar o Xcode com facilidade


Assim que voc tiver instalado o kit de desenvolvimento de software (software development kit, SDK) do iOS, o primeiro desafio ao utilizar o XCode ser localiz-lo.
Diferentemente da maioria dos aplicativos que so instalados na pasta /Applications,
a Apple separa ferramentas de desenvolvedores na pasta /Developer/Applications.
A forma mais fcil de encontrar o Xcode utilizar o Finder para abrir a pasta raiz
Macintosh HD (Figura 1.3). A partir desse ponto, voc pode avanar at a pasta Developer e, finalmente, sua subpasta Applications. Como desenvolvedor, voc passar
muito tempo no Xcode, por isso pode ser interessante colocar seu cone no Dock ou
sua pasta na barra lateral do Finder, facilitando seu acesso.

Figura 1.3 Janela do Finder mostrando a localizao da pasta Developer, que contm todas as ferramentas e
documentao relacionadas a recursos para desenvolvedores.

Assim que tiver localizado a pasta /Developer/Applications, voc no dever ter dificuldades em encontrar e iniciar o Xcode.

Captulo 1 Criao de seu primeiro aplicativo iOS

25

importante notar que o Xcode no sua nica opo. Ainda que ele fornea todos
os elementos necessrios para que voc desenvolva seus aplicativos sem necessitar
de outros recursos, isso no significa que voc no possa complement-lo com suas
ferramentas favoritas. Por exemplo, caso tenha um editor de texto preferido, no qual
voc se considera mais produtivo, possvel configurar o Xcode para utiliz-lo, em
vez da funcionalidade integrada. Se voc realmente gosta de sofrer, pode at voltar a
utilizar makefiles e a linha de comando.
Socorro! No encontro o aplicativo Xcode
Se voc no encontra uma pasta /Developer, ou se no v nenhuma referncia aos
templates de projetos para iPhone ou iPad quando o Xcode inicializado, consulte o
apndice A e veja como fazer o download e a instalao do software necessrio.

1.3.3 Criao de seu projeto


Para criar seu primeiro projeto, selecione a opo New Project no menu File (Shift-Cmd-N). O
Xcode abrir uma caixa de dilogo New Project, semelhante da figura 1.4.

Figura 1.4 Caixa de dilogo New Project do Xcode, mostrando o template View-based Application.

Sua primeira deciso deve ser escolher o tipo de projeto que deseja criar. Isso poder
ser feito selecionando um template que determine o tipo de cdigo-fonte e de configurao que o Xcode dever adicionar automaticamente ao seu projeto.

26

Objective-C Fundamental

Para nosso jogo Coin Toss, voc deve escolher o template View-based Application. Para
selecion-lo, escolha primeiro Application sob o ttulo iOS na aba da esquerda e selecione
View-based Application. Depois, clique em Next no canto inferior direito. D um nome ao seu
projeto e especifique o identificador de empresa necessrio para associar o aplicativo
sua conta iOS Developer. Para esse projeto, utilize o nome CoinToss e digite um
identificador adequado.
O Xcode utiliza os valores referentes ao nome do produto e ao identificador da empresa
para criar o que chamamos de identificador de pacote. Utilizando essa string, o iOS
capaz de identificar individualmente cada aplicativo. Para que seu sistema operacional
permita a execuo do CoinToss, seu identificador de pacote deve corresponder a um
identificador includo em um perfil de provisionamento instalado no dispositivo. Se
o dispositivo no puder encontrar um perfil adequado, ele se recusar a executar o
aplicativo. dessa forma que a Apple controla, com punho de ferro, quais aplicativos
podem ser executados em seus sistemas. Se voc no possui um identificador de empresa adequado ou se no est seguro quanto ao que deve digitar nesse campo, siga
as instrues do apndice A antes de prosseguir neste captulo.
Assim que todos os detalhes tiverem sido digitados, desmarque a caixa Include Unit Tests
e clique em Next para selecionar o local em que deseja salvar seu projeto e os arquivos
de cdigo-fonte gerados.
Socorro! No vejo nenhuma opo relacionada ao iOS
Se voc no vir nenhum template baseado em iOS no dilogo do novo projeto, possvel
que no tenha instalado corretamente o SDK do iOS. Provavelmente, a cpia do Xcode
que voc est executando de um DVD de instalao do Mac OS X, ou talvez voc tenha
feito seu download diretamente no site Apple Developer Connection (ADC). Essa verso
adequada apenas para o desenvolvimento de aplicativos desktop. Instale o SDK iOS
da forma descrita no apndice A e substitua sua cpia do Xcode por uma verso mais
adequada que inclua suporte a desenvolvimento para iPhone e iPad.

Voc pode estar se perguntando que outros tipos de projeto so possveis. A tabela
1.2 lista os templates de projetos iOS mais comuns. Sua escolha depender do tipo
de interface que deseja para seu aplicativo. No fique muito preocupado com essa
seleo; sua deciso no to crtica quanto parece. Assim que seu projeto tiver sido
criado, voc poder alterar o estilo de seu aplicativo ainda que isso seja um pouco
mais difcil, pois o template do projeto no inserir automaticamente todo o cdigofonte. Nesse caso, voc mesmo ter de faz-lo.

27

Captulo 1 Criao de seu primeiro aplicativo iOS

Tabela 1.2 Templates de projetos disponveis no Xcode para criao de um novo projeto iOS
Tipo de projeto

Descrio

Navigation-based Application

Cria um aplicativo de estilo semelhante ao Contacts, com uma barra de navegao no topo.

OpenGL ES Application

Cria um aplicativo grfico baseado em Open GL ES, indicado para jogos e outras funcionalidades.
Cria um aplicativo de estilo semelhante ao Mail do iPad. Esse tipo de projeto indicado para
representar informaes de estilo master/detail em uma nica tela.
Cria um aplicativo de estilo semelhante ao Clock, com uma barra de guias na base.
Cria um aplicativo de estilo semelhante aos aplicativos Stock e Weather, que pode ser virado para
revelar uma segunda face.
Cria um aplicativo que consiste em uma nica viso. Com essa opo, voc pode desenhar e
responder a eventos de toque vindos da viso personalizada.
Cria um aplicativo que consiste de uma nica janela, na qual voc pode arrastar e soltar controles.

Split Viewbased Application


Tab Bar Application
Utility Application
View-based Application
Window-based Application

Agora que voc completou o dilogo New Project, ver uma janela de projeto semelhante da figura 1.5. Essa a janela principal do Xcode. esquerda, temos um painel
Project Navigator e, direita, um grande painel contextual para edio.

Figura 1.5 Janela principal do Xcode, com o grupo CoinToss totalmente expandido para revelar os diversos
arquivos de cdigo-fonte do projeto.

28

Objective-C Fundamental

O painel da esquerda lista todos os arquivos que compem seu aplicativo. O grupo
CoinToss representa o jogo inteiro. Se voc expandir esse n, poder visualizar subgrupos menores at que eventualmente chegue aos arquivos que formam o projeto.
Voc est livre para criar seus prprios agrupamentos e organizar os arquivos da
forma que preferir.
Quando voc clicar em um arquivo no painel da esquerda, o painel da direita ser
atualizado para fornecer um editor adequado ao arquivo selecionado. Para arquivos
de cdigo-fonte, com extenso *.h e *.m, um editor de texto tradicional para cdigofonte ser apresentado. Outros tipos de arquivos (como arquivos *.xib de recursos)
esto associados a editores grficos mais complexos.
Alguns grupos do painel da esquerda esto associados a comportamentos especiais
ou simplesmente no representam arquivos. Por exemplo, os itens do grupo Frameworks
indicam bibliotecas de cdigo pr-compilado utilizadas pelo projeto atual.
Quando voc estiver mais vontade com o desenvolvimento de aplicativos no Xcode,
poder explorar as muitas sees apresentadas no painel Project Navigator. Para iniciar
sua jornada, vamos escrever o cdigo-fonte de sua primeira classe.

1.3.4 Elaborao do cdigo-fonte


O template View-based Application apresenta cdigo-fonte suficiente para a criao
de um jogo bsico para iPhone to bsico, na verdade, que se voc executar o jogo
agora mesmo ver simplesmente um retngulo cinza na tela.
Vamos comear a implementao do jogo abrindo o arquivo CoinTossViewController.h
na janela do Xcode e utilizando o editor de texto para substituir o contedo pela
listagem que temos a seguir.

Listagem 1.1 CoinTossViewController.h


#import <UIKit/UIKit.h>
@interface CoinTossViewController : UIViewController {
UILabel *status;
UILabel *result;
}
@property (nonatomic, retain) IBOutlet UILabel *status;
@property (nonatomic, retain) IBOutlet UILabel *result;
- (IBAction)callHeads;
- (IBAction)callTails;
@end

Captulo 1 Criao de seu primeiro aplicativo iOS

29

No se preocupe se o contedo dessa listagem no fizer muito sentido para voc. No


momento, mais importante que voc compreenda o significado global desse cdigo.
Os detalhes ficaro por conta do restante do livro com o tempo, tudo ser revelado!
Por ora, vamos nos concentrar em compreender a estrutura geral de um projeto baseado em Objective-C. Objective-C uma linguagem orientada a objetos, o que significa
que grande parte de seu trabalho com o cdigo ter como objetivo definir novas
classes (tipos de objetos). A listagem 1.1 define uma nova classe, CoinTossViewController.
Por conveno, a definio de uma classe mantida em um arquivo de cabealho
que utiliza uma extenso *.h.
No arquivo de cabealho CoinTossViewController, as duas primeiras linhas declaram que
a classe armazena os detalhes de dois controles UILabel localizados em algum ponto
da interface do usurio. Um UILabel pode representar uma nica linha de texto, e voc
utilizar esses rtulos (labels) para representar o resultado do cara ou coroa.
O segundo grupo de instrues permite que cdigos externos a essa classe digamlhe quais UILabels devem ser utilizados. Finalmente, voc especifica que sua classe
deve responder a duas mensagens, callHeads e callTails. Essas mensagens servem para
inform-lo se o usurio escolheu cara ou coroa e tambm para avis-lo de que um
novo sorteio deve ser iniciado.
Um arquivo de cabealho (*.h) especifica aquilo que voc deve esperar de uma classe
e como outros cdigos podem interagir com ela. Agora que voc atualizou o arquivo
de cabealho, deve fornecer a implementao em si dos recursos especificados. Abra
o arquivo CoinTossViewController.m correspondente e substitua seu contedo pelo
da listagem a seguir.

Listagem 1.2 CoinTossViewController.m


#import "CoinTossViewController.h"
#import <QuartzCore/QuartzCore.h>
@implementation CoinTossViewController
@synthesize status, result;

Corresponde @property

- (void) simulateCoinToss:(BOOL)userCalledHeads {
BOOL coinLandedOnHeads = (arc4random() % 2) == 0;

result.text = coinLandedOnHeads ? @"Heads" : @"Tails";

if (coinLandedOnHeads == userCalledHeads)
status.text = @"Correct!";
else
status.text = @"Wrong!";
CABasicAnimation *rotation = [CABasicAnimation Define dois objetos
animationWithKeyPath:@"transform.rotation"];

30

Objective-C Fundamental
rotation.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotation.fromValue = [NSNumber numberWithFloat:0.0f];
rotation.toValue = [NSNumber numberWithFloat:720 * M_PI / 180.0f];
rotation.duration = 2.0f;
[status.layer addAnimation:rotation forKey:@"rotate"];
CABasicAnimation *fade = [CABasicAnimation Afeta o rtulo
animationWithKeyPath:@"opacity"];
fade.timingFunction = [CAMediaTimingFunction
functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
fade.fromValue = [NSNumber numberWithFloat:0.0f];
fade.toValue = [NSNumber numberWithFloat:1.0f];
fade.duration = 3.5f;
[status.layer addAnimation:fade forKey:@"fade"];
}
- (IBAction) callHeads {
[self simulateCoinToss:YES];
}
- (IBAction) callTails {
[self simulateCoinToss:NO];
}
- (void) viewDidUnload {
self.status = nil;
self.result = nil;
}
- (void) dealloc {
[status release];
[result release];
[super dealloc];
}

Gerenciamento de memria

@end

primeira vista, a listagem 1.2 pode lhe parecer longa e assustadora, mas, dividindo-a
em passos menores, voc ver que no difcil entender o que ela faz.
A primeira instruo, , corresponde ao cdigo das declaraes @property em CoinTossViewController.h. O conceito de propriedades e as vantagens de propriedades sintetizadas sero explorados mais detalhadamente no captulo 5.
A maioria da lgica do arquivo CoinTossViewController.m est contida no mtodo
simulateCoinToss:, chamado sempre que o usurio deseja o resultado de um novo sorteio. A primeira linha simula um sorteio gerando um nmero aleatrio, entre 0 e 1,
para representar cara e coroa, respectivamente. O resultado armazenado em uma
varivel que chamamos de coinLandedOnHeads.

Captulo 1 Criao de seu primeiro aplicativo iOS

31

Uma vez determinado o resultado do sorteio, os dois controles UILabel da interface


do usurio so atualizados. A primeira instruo condicional atualiza o rtulo do
resultado para indicar o resultado do sorteio simulado; a segunda indica se o usurio
acertou em sua escolha.
O restante do mtodo simulateCoinToss: prepara dois objetos CABasicAnimation , e , para
que o estado do sorteio seja mostrado e depois desaparea gradualmente, em vez de
ser atualizado abruptamente. Isso feito solicitando-se que a propriedade transform.
rotation do controle UILabel gire suavemente de 0 a 720 graus em 2.0 segundos, enquanto a propriedade opacity passa de 0% (0.0) a 100% (1.0) durante 3.5 segundos.
importante que voc perceba que essas animaes so realizadas de modo declarativo.
Voc especifica a alterao ou o efeito que deseja e deixa que o framework se preocupe com a lgica de timing e redesenho necessrios para implementar esses efeitos.
O mtodo simulateCoinToss: espera um nico parmetro, userCalledHeads, o qual indica
se o usurio deseja que o sorteio resulte em cara ou coroa. Dois mtodos adicionais,
callHeads e callTails, so mtodos de convenincia que chamam simulateCoinToss:, com
o parmetro userCalledHeads definido como esperado.
O mtodo final, dealloc , lida com questes relacionadas ao gerenciamento de memria. Discutiremos esse tpico detalhadamente no captulo 9. importante que
voc perceba que a linguagem Objective-C no coleta automaticamente a memria
no utilizada (ao menos no que se refere ao iPhone). Isso significa que, se voc alocar memria ou recursos do sistema, tambm ser responsvel por liber-los (ou
desaloc-los). Se no o fizer, seu aplicativo acabar consumindo artificialmente mais
recursos do que necessrio e, nos piores casos, consumir por completo os recursos
limitados do dispositivo, travando o aplicativo.
Agora que desenvolveu a lgica bsica do jogo, voc deve criar a interface de usurio
no Xcode e conect-la ao cdigo da classe CoinTossViewController.

1.4 Conexo da interface do usurio


Neste estgio voc pode perceber, pela definio da classe CoinTossViewController, que a
interface do usurio deve ter ao menos dois controles UILabel e invocar as mensagens
callHeads ou callTails sempre que o usurio quiser o resultado de um novo sorteio.
Voc ainda no especificou em que ponto da tela os rtulos devem ser posicionados
ou como o usurio pode solicitar a realizao de um sorteio.
H dois modos de especificar esse tipo de detalhe. Primeiro, poderamos escrever o
cdigo-fonte que cria os controles da interface do usurio, configurar suas propriedades, como tamanho de fonte e cor, e posicion-los na tela. Certamente, demoraramos a

32

Objective-C Fundamental

escrever esse cdigo e voc poderia gastar muito de seu tempo simplesmente tentando
imaginar o visual adequado dessa implementao.
A melhor alternativa utilizar o Xcode, que permite que voc visualize o layout e
configure os controles de sua interface de usurio, conectando-os ao cdigo-fonte. A
maioria dos templates de projetos iOS utiliza essas tcnicas, e geralmente inclui um
ou mais arquivos *.xib projetados para descrever a interface do usurio. Esse projeto
no uma exceo; clique no arquivo CoinTossViewController.xib no painel Project Navigator
e veja que o painel do editor exibe seu contedo (Figura 1.6).

Figura 1.6 Janela principal do Xcode mostrando a edio de um arquivo *.xib. Na borda esquerda do editor
voc pode ver trs cones, cada um representando um objeto ou um componente GUI diferente, armazenado
no arquivo .xib.

Na borda esquerda do painel do editor temos alguns cones. Cada um representa um


objeto criado quando o jogo executado, e cada um tem uma dica de contexto (tooltip)
que mostra seu nome. A caixa representada apenas por suas arestas, intitulada Files

Captulo 1 Criao de seu primeiro aplicativo iOS

33

Owner, representa uma instncia da classe CoinTossViewController; o retngulo branco


representa a viso (ou a tela) principal do aplicativo. Utilizando o Xcode, voc pode
configurar graficamente as propriedades desses objetos e criar conexes entre eles.

1.4.1 Incluso de controles a uma viso


O primeiro passo na definio da interface do usurio de seu jogo ser o posicionamento dos controles necessrios dentro da viso.
Para incluir controles, localize-os na janela Library, a qual contm um catlogo de
controles disponveis para a interface do usurio. Arraste-os e solte-os na viso. Se a
janela Library no estiver visvel, voc pode abri-la com a opo de menu View > Utilities
> Object Library (Control-Option-Cmd-3). Para o jogo de cara ou coroa, voc necessita
de dois Labels e dois Rounded Rect Buttons. Arraste dois de cada para a viso. O processo de
arrastar e soltar um controle na viso pode ser visto na figura 1.7.

Figura 1.7 Arrastando e soltando controles na viso. Note as linhas de ajuste que servem para garantir
que sua interface de usurio esteja de acordo com as diretrizes para interface humana (Human Interface
Guidelines, HIG) do iOS.

34

Objective-C Fundamental

Depois de arrastar e soltar os controles na viso, voc pode redimension-los e ajustar suas posies de acordo com a esttica pretendida. A forma mais fcil de alterar
o texto mostrado por um boto ou um controle clicar duas vezes nele e digitar
o texto. Para alterar outras propriedades, como o tamanho e a cor das fontes, voc
pode utilizar o painel Attributes Inspector, que pode ser acessado pela opo de menu View
> Utilities > Attributes Inspector (Alt-Cmd-4). Quando estiver estilizando sua viso, consulte
a figura 1.2 para referncia.
Com os controles posicionados na interface do usurio, a nica tarefa que resta
conect-los ao cdigo que escrevemos. Lembre-se de que a classe definida no arquivo
de cabealho CoinTossViewController.h requer trs elementos da interface do usurio:
um local para enviar as mensagens callHeads ou callTails sempre que o usurio
quiser iniciar um sorteio;
um UILabel para mostrar o resultado do ltimo sorteio (cara ou coroa);
um UILabel para mostrar o estado do ltimo sorteio (correto ou incorreto).

1.4.2 Conexo dos controles ao cdigo-fonte


A interface de usurio que acabamos de criar atende a esses requisitos, mas o cdigo
no consegue determinar quais botes devem indicar que o usurio escolheu cara
ou coroa (mesmo que o texto dos botes torne isso bvio para um humano). Nesse
caso, voc deve estabelecer explicitamente essas conexes. O Xcode permite que voc
o faa de modo grfico.
Segure a tecla Control e arraste o boto rotulado como Heads em direo ao cone
que representa a instncia de CoinTossViewController (Files Owner) localizada na borda
esquerda do editor. Conforme voc arrasta, uma linha azul deve aparecer entre os
dois elementos.
Quando soltar o mouse, um menu pop-up ser mostrado, permitindo que voc escolha qual mensagem deve ser enviada ao objeto CoinTossViewController sempre que o
boto for pressionado (Figura 1.8). Nesse caso, voc seleciona callHeads, uma vez que
essa a mensagem que corresponde inteno do boto.
Voc pode repetir esse processo para conectar o boto Tails ao mtodo callTails. Essas
duas conexes fazem com que o pressionamento de cada boto na interface do usurio resulte na execuo de lgica na classe CoinTossViewController. Ter essas conexes
especificadas graficamente, em vez de programaticamente, representa uma abordagem muito flexvel, pois permite que voc experimente, com rapidez e facilidade,
conceitos distintos de interface de usurio, alterando seus controles e conectando-os
novamente classe.

Captulo 1 Criao de seu primeiro aplicativo iOS

35

Figura 1.8 Formando visualmente uma conexo entre o controle do boto e a classe
CoinTossViewController, com o recurso de arrastar e soltar.

Se o Xcode se recusar a efetuar uma conexo entre um controle da interface do usurio e um objeto, pode ser que haja um problema no cdigo-fonte: talvez um simples
erro de digitao ou um tipo de dado incorreto. Nesse caso, certifique-se de que o
aplicativo ainda pode ser compilado e corrija os erros que surgirem antes de efetuar
a conexo novamente.
Terminado seu trabalho com os botes, agora voc ter de conectar os controles dos
rtulos classe CoinTossViewController para permitir que o cdigo atualize a interface
do usurio com os resultados do ltimo sorteio.
Para conectar os controles dos rtulos, voc tambm pode utilizar uma operao de
arrastar e soltar como a que vimos. Dessa vez, segurando a tecla Control, clique no cone
que representa a instncia de CoinTossViewController arrastando-o at o rtulo na viso.
Ao soltar o mouse, surgir um menu pop-up permitindo a seleo da propriedade
da classe CoinTossViewController que voc deseja conectar ao controle do rtulo. Esse
processo pode ser visto na figura 1.9. Utilizando-se dele, conecte o rtulo CoinToss
propriedade status e o rtulo intitulado Select Heads or Tails propriedade result.

36

Objective-C Fundamental

Figura 1.9 Formando visualmente uma conexo entre a varivel de instncia de estado e o controle do
rtulo na interface do usurio, com o recurso de arrastar e soltar (segurando a tecla Control).

Para decidir como formar as conexes dos objetos, pense no fluxo das informaes. No
caso de um boto, pression-lo far com que um mtodo do aplicativo seja executado,
ao passo que, no caso da conexo do rtulo, uma alterao no valor da varivel de
instncia da classe dever atualizar a interface do usurio.
Voc pode estar se perguntando como o Xcode determina quais itens devem ser mostrados no menu pop-up. Se voc retornar listagem 1.1, a resposta poder ser vista
nas palavras-chave especiais IBOutlet e IBAction. O Xcode processa o cdigo-fonte e
permite que voc conecte a interface do usurio a qualquer elemento marcado com
um desses atributos especiais.
Nesse estgio, pode ser interessante verificar se voc efetuou corretamente as conexes necessrias. Se voc segurar Control e clicar no cone que representa a instncia de
CoinTossViewController, ver um menu pop-up que lhe permite verificar como todas as
sadas e aes associadas a um objeto esto conectadas. Se voc passar o ponteiro do
mouse sobre uma das conexes, o Xcode destacar o objeto associado. Esse recurso
pode ser visto na figura 1.10.

Captulo 1 Criao de seu primeiro aplicativo iOS

37

Figura 1.10 Verificao das conexes feitas de, e para o objeto CoinTossViewController.

Com isso, podemos dizer que voc concluiu seu trabalho na interface do usurio.
Agora, seguiremos em frente, verificando se cometemos algum erro, e finalmente
vendo se nosso jogo funciona corretamente.
NIBs vs. XIBs
A interface de usurio para um aplicativo iOS armazenada em um arquivo .xib. Ainda
assim, na documentao e nos frameworks Cocoa Touch, esses arquivos so geralmente
chamados de nibs.
No h problema em trocar esses termos: um arquivo .xib utiliza um formato mais novo
de arquivo baseado em XML, o que facilita o armazenamento do arquivo em sistemas
de controle de reviso e assim por diante.
Um .nib, por outro lado, representa um formato binrio mais antigo, que resulta em
arquivos menores, com maior velocidade de processamento, e assim por diante.
A documentao geralmente se refere a arquivos NIB em vez de XIB, uma vez que,
medida que compila seu projeto, o Xcode converte automaticamente arquivos *.xib para
o formato *.nib.

38

Objective-C Fundamental

1.5 Compilao do jogo de cara ou coroa


Agora que terminou a codificao de seu aplicativo, voc dever converter seu
cdigo-fonte para um formato que o iPhone possa utilizar. Esse processo chamado
de compilao do projeto. Para compilar o jogo, selecione Build no menu Product (ou
pressione Cmd-B).
Enquanto o projeto compilado, voc pode monitorar o processo verificando o
indicador na barra de ferramentas. Nele, voc deve encontrar a seguinte mensagem:
Build CoinToss: Succeeded. Se voc cometeu algum erro, clique no cone vermelho
de exclamao sob o texto (ou pressione Cmd-4) para visualizar uma lista de erros
e avisos que devem ser resolvidos.
Ao clicar em um erro nessa lista, voc ter acesso ao cdigo-fonte correspondente,
no qual as linhas com problemas estaro destacadas, como na figura 1.11. Depois de
corrigir o que h de errado no cdigo, voc poder compilar o aplicativo novamente,
repetindo esse processo at que todos os problemas tenham sido solucionados.

Figura 1.11 O editor de texto do Xcode destaca visualmente linhas do cdigo-fonte que apresentam erros de
compilao. Depois de corrigir os erros, a compilao do projeto indicar se voc corrigiu o problema.

Captulo 1 Criao de seu primeiro aplicativo iOS

39

Ao compilar o jogo de cara ou coroa, voc deve notar a presena de erros que mencionam kCAMediaTimingFunctionEaseInEaseOut, CAMediaTimingFunction e CABasicAnimation. Para
corrigir esses erros, selecione o projeto CoinToss no Project Navigator (primeiro item na viso
em rvore). No editor que surge para esse item, v at a aba Build Phases e expanda a
seo Link Binary with Libraries. A regio expandida deve mostrar uma lista de frameworks
adicionais exigidos por seu aplicativo. Para que as animaes de interface funcionem,
voc ter de clicar no boto +, na base da janela, e selecionar QuartzCore.framework da
lista apresentada.
Para manter tudo organizado, assim que voc tiver adicionado a referncia ao framework QuartzCore, pode ser interessante mov-lo dentro da viso em rvore do
navegador do projeto, de forma a ficar sob a seo Frameworks, ao lado de outros
frameworks dos quais seu aplicativo depende.

1.6 Um teste do Coin Toss


Agora que voc compilou o jogo e corrigiu seus erros mais bvios, estamos prontos
para verificar se nosso projeto funciona como pretendido. Para isso, voc poderia
simplesmente executar o jogo e verificar se ele se comporta corretamente ou se trava,
mas isso no seria muito prtico e, alm do mais, acabaria por obrig-lo a adivinhar o
que acontece no cdigo. Para auxili-lo nessa situao, o Xcode fornece um depurador
integrado que se conecta execuo de seu aplicativo, permitindo que voc o pause
temporariamente para observar o valor das variveis, percorrendo o cdigo-fonte linha
a linha. Porm, antes de aprender a utilizar esse recurso, faremos um breve desvio.

1.6.1 Seleo de um destino


Antes de testar seu aplicativo, voc deve decidir onde deseja execut-lo. Durante as
fases iniciais de desenvolvimento, voc geralmente testar seu aplicativo por meio
do iOS Simulator. Esse simulador faz a funo de um dispositivo iPhone ou iPad e
pode ser executado em uma janela do desktop de sua mquina Mac OS X. Utilizar o
simulador pode acelerar o desenvolvimento de seu aplicativo, uma vez que muito
mais rpido para o Xcode transferir e depurar seu aplicativo no simulador do que
trabalhar com um iPhone real.
Desenvolvedores com experincia em outras plataformas mveis podem estar acostumados a utilizar emuladores de dispositivos. Os termos simulador e emulador no so
sinnimos. Diferentemente de um emulador, que procura emular o dispositivo no
nvel do hardware (e que, dessa forma, capaz de executar um firmware virtualmente
idntico ao do dispositivo real), um simulador procura apenas fornecer um ambiente
que tenha um conjunto compatvel de APIs.

40

Objective-C Fundamental
Sempre faa seus testes em um dispositivo iPhone, iPod Touch ou iPad real
Os cdigos de exemplo deste livro foram projetados para ser executados no iOS Simulator.
Essa uma forma rpida e fcil de desenvolver seu aplicativo de modo iterativo, sem que
voc tenha de se preocupar com a conectividade do dispositivo ou com a demora de sua
transferncia para um dispositivo real.
Como o iOS Simulator no uma rplica perfeita de um iPhone, possvel que um
aplicativo funcione no simulador, mas falhe em um dispositivo real. Nunca publique
um aplicativo na App Store do iTunes sem test-lo em um dispositivo real, ou, melhor
ainda, procure testar seu aplicativo em alguns modelos diferentes de dispositivos, como
o iPhone e o iPod Touch.

O iOS Simulator executa seu aplicativo na cpia do Mac OS X utilizada por seu
desktop, o que significa que ocasionalmente podem haver diferenas entre o simulador
e um iPhone de verdade. Um exemplo simples de uma situao em que isso ocorre
pode ser visto no que se refere a nomes de arquivos. No iOS Simulator, nomes de
arquivos geralmente no diferenciam maisculas de minsculas, ao passo que, em
um iPhone, essa diferena se verifica.
Por padro, a maioria dos templates de projetos est configurada para implantar seu
aplicativo no iOS Simulator. Para implantar seu aplicativo em um iPhone real, voc
deve alterar o destino, de iPhone Simulator para iOS Device. A forma mais fcil de
faz-lo selecionar o destino desejado no menu suspenso que temos na parte esquerda
da barra de ferramentas, na janela principal do Xcode (Figura 1.12).

Figura 1.12 Canto superior esquerdo da janela principal do Xcode. A seleo de CoinToss/ iPhone 4.3
Simulator, oferecida pelo menu suspenso, permite que voc alterne entre o iPhone Simulator e o dispositivo iOS.

Ao definir o destino como iOS Device, voc garantir que o Xcode tentar implantar
seu aplicativo em seu iPhone real. Ainda assim, ser necessrio mais uma alterao
antes que isso d certo.

1.6.2 Uso de breakpoints para inspecionar o estado de um aplicativo em execuo


Quando voc est testando um aplicativo, comum que queira investigar o comportamento de uma seo especfica do cdigo-fonte. Antes de iniciar o aplicativo, pode
ser interessante configurar o depurador para pausar automaticamente a execuo
sempre que pontos como esse forem atingidos. Isso pode ser feito por meio de um
recurso que chamamos de breakpoints, ou pontos de interrupo.

Captulo 1 Criao de seu primeiro aplicativo iOS

41

Para o depurador, um breakpoint indica um ponto no cdigo-fonte em que o usurio


gostaria de interromper a execuo e verificar o cdigo, explorando o valor atual das
variveis, e assim por diante.
Para nosso jogo de cara ou coroa, vamos adicionar um breakpoint ao incio do mtodo
simulateCoinToss:. Abra o arquivo CoinTossViewController.m e v at a seo que implementa esse mtodo. Se voc clicar na margem esquerda ao lado da primeira linha,
dever fazer com que aparea, nesse ponto, um pequeno marcador azul (Figura 1.13).

Figura 1.13 Definio de um breakpoint para uso pelo depurador sempre que a primeira linha do mtodo

simulateCoinToss: for chamada. Note a presena do marcador na margem, indicando um breakpoint ativo.

O marcador azul indica que essa linha tem um breakpoint habilitado. Se voc clicar
no breakpoint, sua cor mudar para um azul mais claro, indicando que ele foi desabilitado, o que far com que o depurador o ignore at que voc clique novamente
nele, reabilitando-o. Para remover permanentemente um breakpoint, clique sobre ele
e arraste-o para fora da margem. Ao soltar o mouse, voc ver uma pequena animao
indicando o desaparecimento do breakpoint, e ele ser removido.

42

Objective-C Fundamental

1.6.3 Execuo do jogo CoinToss no simulador do iPhone


Com o breakpoint posicionado, voc finalmente estar pronto para executar o
aplicativo e v-lo em ao. Selecione Run do menu Product (Cmd-R). Depois de alguns
segundos, o aplicativo aparecer em seu iPhone. Todo o seu trabalho valeu a pena.
Parabns! Voc agora oficialmente um desenvolvedor iPhone!
Se voc quiser executar o jogo, mas no quiser que nenhum de seus breakpoints
esteja habilitado, pode clicar em cada um para desabilit-los individualmente. Isso
seria um pouco demorado e exigiria que voc reabilitasse manualmente todos os
breakpoints quando quisesse utiliz-los novamente. Como alternativa prtica, voc
pode desabilit-los temporariamente selecionando a opo Product > Debug > Deactivate
Breakpoints (Cmd-Y).

1.6.4 Controle do depurador


Agora que voc viu seu primeiro aplicativo iPhone em execuo, estou certo de que
no resistiu e apertou um dos botes de cara ou coroa. Ao tocar em um boto, note
que a janela do Xcode pula para o primeiro plano. Isso ocorre porque o depurador
detecta que a execuo do aplicativo atingiu um ponto onde inserimos um breakpoint.
A janela do Xcode que surge deve ser semelhante da figura 1.14. Note que o painel
principal da janela do Xcode mostra o cdigo-fonte do mtodo que est sendo executado. Ao passar seu mouse sobre uma varivel do cdigo-fonte, voc ver uma dica de
dados, mostrando o valor atual da varivel. A linha do cdigo-fonte que est prestes
a ser executada ser destacada e identificada por uma seta verde na margem direita.
Enquanto o depurador estiver sendo executado, voc dever notar uma alterao no
painel esquerdo da janela do Xcode para mostrar a pilha de chamadas de cada thread do aplicativo. A pilha de chamadas lista a ordem na qual os mtodos executados
foram chamados, tendo o mtodo atual no topo. Muitos dos mtodos listados estaro
em cinza, indicando que o cdigo-fonte no est disponvel para eles; nesse caso,
isso ocorre porque muitos deles so detalhes internos do framework Cocoa Touch.
Um novo painel na base da tela tambm deve estar visvel; ele mostra os valores atuais das variveis e argumentos relevantes posio atual do depurador, assim como
sadas em texto emitidas pelo depurador (Figura 1.14).
Na parte superior do painel localizado na base do depurador, voc poder notar uma
srie de pequenos botes formando uma barra de ferramentas, como a que vemos
na figura 1.15.

Captulo 1 Criao de seu primeiro aplicativo iOS

43

Figura 1.14 Janela do depurador do Xcode, depois que a execuo atingiu um breakpoint.

Figura 1.15 Opes da barra de ferramentas do Xcode para controlar o depurador.

Essas opes permitem que voc controle o depurador e ganham importncia quando
ele pausa o aplicativo ou interrompe sua execuo ao atingir um breakpoint. Esses
botes (que nem sempre podem estar todos presentes) permitem que voc realize as
seguintes aes:
Hide Oculta a janela do console do depurador e o painel das variveis para
maximizar o espao de tela oferecido ao editor.
Pause Pausa imediatamente o aplicativo iPhone e entra no depurador.
Continue Executa o aplicativo at que outro breakpoint seja atingido.
Step Over Executa a prxima linha de cdigo e retorna para o depurador.

44

Objective-C Fundamental

Step Into Executa a prxima linha de cdigo e retorna para o depurador. Se


a linha chamar algum mtodo, eles tambm podero ser analisados passo a
passo.
Step Out Continua a execuo do cdigo, at que o mtodo atual retorne.
Seu breakpoint fez com que o depurador pausasse a execuo no incio de um sorteio
simulado de cara ou coroa. Se voc visualizar o painel de variveis, ou se passar seu
mouse sobre o argumento userCalledHeads, poder determinar se o usurio escolheu
cara (YES) ou coroa (NO).
A primeira linha do mtodo simulateCoinToss: simula o lanamento de uma moeda
(selecionando um nmero aleatrio, 0 ou 1). Nesse ponto, o depurador est parado
nessa linha (indicado pelo marcador vermelho na margem) e suas instrues ainda
no foram executadas.
Para solicitar que o depurador execute uma nica linha do cdigo-fonte e depois retorne para o depurador, voc pode clicar no boto Step Over e avanar prxima linha do
cdigo-fonte. Isso far com que o sorteio seja simulado, e o marcador vermelho dever
descer para a prxima linha de cdigo-fonte. Nesse estgio, voc pode determinar o
resultado do sorteio passando seu mouse sobre o nome da varivel coinLandedOnHeads;
uma vez mais, YES significa cara, e NO, coroa.
Utilizando esse recurso mais algumas vezes, voc pode percorrer as duas instrues if,
atualizando o resultado e o estado dos UILabels na interface do usurio. Ainda assim,
diferentemente do que poderamos esperar, se voc verificar o dispositivo iPhone
nesse momento, ver que os rtulos no foram atualizados. Isso ocorre pela forma
como operam os componentes Cocoa Touch: a tela ser atualizada apenas quando
voc liberar o depurador e permitir que esse mtodo retorne ao sistema operacional.
Para permitir que o iPhone atualize a interface do usurio, e para visualizar as animaes que indicam um novo resultado, voc pode clicar em Continue (ou pressionar
Cmd-Option-P) e permitir que o aplicativo continue sua execuo, at que atinja
outro breakpoint, ou at que voc o pause novamente. Olhando mais uma vez seu
iPhone, voc poder ver que os resultados do sorteio aparecem finalmente na tela.

1.7 Sumrio
Parabns, voc desenvolveu seu primeiro aplicativo iPhone! Mostre o resultado para
os seus amigos e a sua famlia. Talvez ele no venha a ser o mais novo sucesso da App
Store, mas na criao desse aplicativo voc aprendeu a dominar muitos dos recursos
importantes do IDE Xcode, estando no caminho certo para desenvolver aplicativos
de sucesso.

Captulo 1 Criao de seu primeiro aplicativo iOS

45

Ainda que Objective-C seja uma linguagem poderosa com muitos recursos, voc ver
que utilizar ferramentas visuais como o Xcode pode produzir grandes melhorias
de produtividade, especialmente durante a prototipagem inicial de seu aplicativo.
Desvincular a lgica de um aplicativo da forma como ela apresentada ao usurio
um mecanismo poderoso que no deve ser subestimado. provvel que a primeira
interface de usurio projetada por voc no seja perfeita. Ser capaz de alter-la, sem
ter de modificar nenhuma linha de cdigo, uma vantagem poderosa.
Da mesma forma, voc pode confiar no framework Cocoa Touch para trabalhar na
implementao de muitos recursos de seu jogo. Por exemplo, as animaes foram
implementadas de modo declarativo: voc especificou pontos de incio e fim para as
operaes de rotao e esmaecimento e deixou que o framework trabalhasse para
redesenhar a tela e efetuar a animao, acelerando ou desacelerando o efeito na medida em que esse se completava.
Como voc continuar vendo, os frameworks Cocoa Touch so muito poderosos.
Se voc tiver de escrever grandes quantidades de cdigo para recursos especficos,
provvel que no esteja aproveitando tudo que o Cocoa pode lhe oferecer.
No captulo 2, vamos nos aprofundar em tipos de dados, variveis e constantes.
Tambm seremos apresentados ao aplicativo gerenciador de aluguis, que veremos
no restante deste livro.

Você também pode gostar