SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Introdução ao
desenvolvimento para
iOS
Andrei Rosseti
andrei@facedigital.com.br
Eu ;-)
• Bacharel em SI na Univille	

• CTO e CO-Founder na FACE Digital Sistemas	

• Facebook/Twitter: @andreirosseti
FACE Digital
• Fundada em 2004	

• Desenvolvimento Web/Mobile	

• Design Gráfico	

• E-Learning
Tópicos
• Estatísticas da Apple App Store	

• Mundo Mobile	

• Introdução ao Desenvolvimento	

• Exemplo Prático	

• Case FACE Digital
App Store Stats
Setembro, 2009 Setembro, 2010 Outubro, 2011 Novembro, 2012
3mil+ 250 mil+ 500mil+ 1milhão+
Aplicativos
Setembro, 2009 Setembro, 2010 Outubro, 2011 Junho, 2012
1,8 bilhão 6,5 bilhões 18 bilhões 40 bilhões
Downloads
http://www.apple.com/pr/library/2008/07/10iPhone-3G-on-Sale-Tomorrow.html	

http://www.apple.com/pr/library/2009/09/28Apples-App-Store-Downloads-Top-Two-Billion.html	

http://www.youtube.com/watch?v=-WIKvtI2Zuw	

http://events.apple.com.edgesuite.net/11piuhbvdlbkvoih10/event/index.html	

http://idgnow.uol.com.br/mobilidade/2012/11/21/apple-ja-aprovou-mais-de-1-milhao-de-aplicativos-para-ios/	

http://www.apple.com/pr/library/2013/01/07App-Store-Tops-40-Billion-Downloads-with-Almost-Half-in-2012.html
Fontes
Mundo Mobile
iPhone OS Android Windows Phone
Introdução ao
Desenvolvimento
• Conjunto de ferramentas do iPhone	

• Iniciando um projeto	

• Estrutura de um Aplicativo de iPhone	

• Objective-C
Conjunto de
ferramentas do iPhone
XCode
Objetive C, GDB
Interface Builder
Interface Gráfica, integrado ao XCode
Profiler
Análise do software	

Buscar vazamentos de memória (leaks)
Simulador
Testes
Iniciando um Projeto
Iniciando um projeto
Iniciando um projeto
Iniciando seu projeto
Simulador do iPhone
Depurador (gdb)
depurador
Estrutura de um
Aplicativo de iPhone
Frameworks relacionados	

Gráficos, Som, Bluetooth & outros.
Estrutura do Aplicativo
Arquivo Executável	

Binário
Estrutura do Aplicativo
Arquivos de Suporte ao Projeto	

Configuração, Strings, Imagens e o Main.
Estrutura do Aplicativo
Código do seu Aplicativo	

Classes de Objetos e Storyboard
As pastas (folders) são
chamados de grupos. Esses
grupos são abstrações para
ajudar a organizar seu projeto,
elas não existem no sistema de
arquivos.
Reorganize como quiser!
Estrutura do Aplicativo
Objetive-C
História
Simula 67
1967
C++
1983
C
1971
Objective-C
1983
Smalltalk-80
1983
Perl
1987
Java
1995
Ruby
1993
Objective-C 2.0
2006
Pytho
1991
http://www.levenez.com/lang/
Fonte:
Objective-C
• Tipos primitivos & Strings	

• Objetos, Mensagens e Propriedades	

• Gerenciamento de Memória
Tipos primitivos
Os tipos mais comuns são:
int, float, ...
possui próprio tipo booleano 	

(obj-c implementou antes do que o C99)
BOOL os valores são YES=1 e NO=0
Alguns outros tipos especiais
SEL, id, Class, IMP
nil é utilizado ao invés de NULL
Implementação
[myButton addTarget:self
action:@selector(myButtonWasPre
ssed)
forControlEvents:UIControlEvent
TouchUpInside];
!
- (void)myButtonWasPressed {
// Do something about it
}
Seletores
Strings
sempre utilize (NSString *) ao invés das Strings do C, a
menos que você saiba o que está fazendo.
inline
@”Este é um exemplo de uma String inline”;
atribuído
NSString *str = @”Esta é uma variável atribuída”;
Se você acidentalmente esquecer do @, pode esperar um crash!
NSLog
Auxilia no processo de depuração.
Sintaxe:
NSLog(@”Deu pau aqui”);
Prefixo NS? WTF
• NSString	

• NSNumber	

• NSLog	

• NSException
NS é herdado de uma API do NextStep. 	

NexT foi uma empresa fundada por Jobs
após a saída em 1985. NextStep foi um
sistema operacional (Unix based)
juntamente com ObjC.
Objective-C
• Tipos primitivos & Strings	

• Objetos, Mensagens e Propriedades	

• Gerenciamento de Memória
Declaração
Objetos
Interface
Implementação
.h
.m
Objetos
Todo objeto é do tipo
id
Ponteiro para os dados da instância do Objeto:
id minhaInstancia;
Você pode declarar um tipo mais específico:
MyClass *minhaInstancia;
Sintaxe ObjC vs Java
MyClass *minhaInstancia = [[MyClass alloc] init];
ou
id minhaInstancia = [[MyClass alloc] init];
Objective C
MyClass minhaInstancia = new MyClass();
Java
Métodos e Mensagens
Mensagens
Chamando Métodos & Passando de mensagens
Mensagens
Sem argumentos
[objeto mensagem];
Com 1 argumento
[objeto mensagem:valor];
Com 2 argumentos
[objeto mensagem:valor arg2:valor];
Mensagens
Sem argumentos
[Pessoa init];
Com 1 argumento
[Pessoa initWithFirst:@”Andrei”];
Com 2 argumentos
[Pessoa initWithFirstAndLast:@”Andrei” last:@”Rosseti”];
Você pode enviar mensagens
para os Objetos
[Pessoa alloc];
Também pode aninhar mensagens
Pessoa *p = [[Pessoa alloc] initWithName:@”Andrei”;
Pessoa *p = [Pessoa alloc];
[p initWithName:@”Andrei”];
Definindo Métodos
Chamando um método:
[Pessoa initWithFirstAndLast:@”Andrei” last:@”Rosseti”];
Definindo um método:
- (id)initWithFirstAndLast:(NSString*)firstName	
last:(NSString*)lastName;
A convenção do init
+(id) alloc; Aloca memória e retorna um ponteiro
-(id) init; Inicializa o novo objeto alocado.
[[Pessoa alloc] init]
Propriedades
Escrever getters e setters na mão é chato d+
Propriedades
As propriedades são macros que o compilador interpreta para gerar
automaticamente os getters e setters.
Propriedades
@property (nonatomic, copy) NSString *firstName;
Interface
@synthetize firstName, lastName;
Implementation
Propriedades
Atributos da Propriedade
@property (atributos) tipo nome;
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html
fonte
Capacidade de Escrita
readwrite (padrão)
Atomicidade
readonly
nonatomic
(não há atributo “atomic”,
mas ele é o padrão).
Semântica Setter
assign (padrão)
retain
copy
atribuído
preserva
Suporte Multi Thread*

Melhor performance
* Multi Thread é uma característica que permite repartir a utilização do processador entre várias tarefas simultaneamente.
Objective-C
• Tipos primitivos & Strings	

• Objetos, Mensagens e Propriedades	

• Gerenciamento de Memória
Idéia básica
Você precisa ajudar o Garbage Collector a saber quando é
permitido limpar um objeto
ObjC já realiza isso com uma técnica semelhante à contagem de
referência. (ARC - Automatic Reference Counting)
Gerenciamento de
Memória
Ciclo de vida de um Objeto
+ alloc - init - retain - release - release
Cria Objeto Inicializa Libera do uso
Libera do usoPreserva para o uso
Gerenciamento de
Memória
Ciclo de vida de um Objeto
1
+ alloc - init - retain - release - release
Cria Objeto Inicializa Libera do uso
Libera do usoPreserva para o uso
1 2 1 0
+1 +1 -1 -1
Exemplo prático
Case - Urbe
http://www.guiaurbe.com.br/
Proximidades
Referências
• Cocoa Developer Central

http://cocoadevcentral.com/d/learn_objectivec/	

• BYU’s CocoaHeads Chapter

http://cocoaheads.byu.edu/resources	

• The Objective-C Programming Language

http://developer.apple.com/documentation/Cocoa/
Conceptual/ObjectiveC/ObjC.pdf


Mais conteúdo relacionado

Semelhante a Introdução ao desenvolvimento para iOS

Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOS
Diogo Costa
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
Marinho Brandão
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
Ricardo Valeriano
 

Semelhante a Introdução ao desenvolvimento para iOS (20)

Introducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOSIntroducao ao Desenvolvimento iOS
Introducao ao Desenvolvimento iOS
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
Desenvolvimento iOS
Desenvolvimento iOSDesenvolvimento iOS
Desenvolvimento iOS
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Desenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-TouchDesenvolvendo para iOS com Cocoa-Touch
Desenvolvendo para iOS com Cocoa-Touch
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
Desenvolvimento Mobile com Visual Studio 2008, por onde começar?
 
iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014iOS Delegates - Mobile Conf Rio 2014
iOS Delegates - Mobile Conf Rio 2014
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
 
OOP ObjC
OOP ObjCOOP ObjC
OOP ObjC
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
jQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com JavascriptjQuery Mobile - Aplicações móveis com Javascript
jQuery Mobile - Aplicações móveis com Javascript
 
Curso Android 01: Introdução
Curso Android 01: IntroduçãoCurso Android 01: Introdução
Curso Android 01: Introdução
 

Introdução ao desenvolvimento para iOS