Post on 27-Jun-2015
description
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
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, 20121,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
Introdução ao Desenvolvimento
• Conjunto de ferramentas do iPhone
• Iniciando um projeto
• Estrutura de um Aplicativo de iPhone
• Objective-C
XCodeObjetive C, GDB
Interface BuilderInterface Gráfica, integrado ao XCode
ProfilerAnálise do software Buscar vazamentos de memória (leaks)
SimuladorTestes
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
HistóriaSimula 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 primitivosOs 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, IMPnil é utilizado ao invés de NULL
Implementação
[myButton addTarget:self action:@selector(myButtonWasPressed) forControlEvents:UIControlEventTouchUpInside]; !- (void)myButtonWasPressed { // Do something about it }
Seletores
Stringssempre 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ídoNSString *str = @”Esta é uma variável atribuída”;
Se você acidentalmente esquecer do @, pode esperar um crash!
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
Objetos Todo objeto é do tipo
idPonteiro 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
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 mensagensPessoa *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]
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 Escritareadwrite (padrão)
Atomicidade
readonlynonatomic(não há atributo “atomic”, mas ele é o padrão).Semântica Setter
assign (padrão)retaincopy
atribuídopreserva
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
Referências
• Cocoa Developer Central http://cocoadevcentral.com/d/learn_objectivec/
• BYU’s CocoaHeads Chapterhttp://cocoaheads.byu.edu/resources
• The Objective-C Programming Languagehttp://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/ObjC.pdf