O documento apresenta uma agenda para um treinamento iOS, abordando conceitos básicos da plataforma e linguagem Objective-C, incluindo frameworks Cocoa Touch, design patterns, classes, protocolos, categories e runtime dinâmico. A parte da manhã é dedicada à introdução teórica e um "dojo" de Objective-C, enquanto à tarde os participantes terão uma sessão prática.
2. Agenda
- Manhã (parte 1): Introdução aos conceitos
básicos da plataforma e da linguagem
Objective-C.
- Manhã (parte 2): Dojo com objective-c para
pegar as manhas ;)
- Tarde: Hands On!
3. Conceitos Básicos: Cocoa Touch
- “The Cocoa Touch frameworks
that drive iOS apps share many
proven patterns found on the Mac,
but were built with a special focus
on touch-based interfaces and
optimization. “ Redator da Apple
5. Cocoa Touch - Foundation.framework
- Base da linguagem(Swift e Obj-C).
- Onde fica os tipos primitivos, tipos de
classe, estruturas, coleções… você
entendeu.
- Foi projetado para ser pequeno, pensando
em portabilidade e facilitar o
desenvolvimento através de convenções
pré-definidas.
6. Cocoa Touch - UiKit.framework
- Framework com tudo que você vai usar no
dia a dia.
- Sério, tudo mesmo!
7. Cocoa Touch - MapKit.framework
- Cuida apenas de assuntos relacionados a
mapas (como o nome indica).
- Desde colocar um mapa dentro da sua view
como fazer reverse-coding pra determinar
um endereço
9. Conceitos Básicos: Objective C
- “Objective-C is the primary programming
language you use when writing software for
OS X and iOS. It’s a superset of the C
programming language and provides object-
oriented capabilities and a dynamic runtime.
”
12. Objective C - Classes
- Lista com todos os tipos pro @property
- atomic
- nonatomic
- retain
- copy
- readonly
- readwrite
- assign
- strong
13. Objective C - Protocol
- Protocols servem para definir
comportamentos esperados por um objeto.
(ou seja, uma interface).
- Você pode definir métodos e propriedades
que, aqueles que implementarem o protocol,
iram incorporar. Eles podem ser obrigatórios
ou não.
15. - São responsáveis por definir métodos de
extensão a tipos já definidos.
- Essencialmente, é uma classe que adiciona
novos comportamentos a outras classes.
Objective C - Categories
17. Objective C - Dynamic Runtime
- ID type
- Distributed Objects
- Dynamic setters/getters
- Key-Value observing
18. Conceitos Básicos - Storyboard
- No iOS 6, foi apresentado o conceito de
Storyboard.
- Dentro dele, você pode ter Scenes.
- Você pode definir a navegação entre essas
cenas utilizando o conceito de Segue.
- Você pode customizar as transições criando
seus próprios segues.
21. Conceitos Básicos: Core Data
- CoreData é o framework responsável pela
persistência dos dados.
- Possui uma API para mapear objetos,
persistir os dados e trabalha com diversos
contextos
Hot links
http://rypress.com/tutorials/objective-c/
Não vou alongar e falar sobre iOS, Apple, Mac e blablaba pq isso
todo mundo aqui já conhece. Mas eu quero falar de alguns conceitos básicos relacionados
ao desenvolvimento pra plataforma iOS. Eu considero importante, pelo menos, saber que isso existe.
O CocoaTouch é um framework que permite a manipulação dos recursos do celular, através de APIs criadas
pela apple.
Em comparação, é muito similar ao .Net Framework, um framework de ferramentas que você
usa para desenvolver suas aplicações.
O CocoaTouch deriva do Cocoa, que é a API pra Mac. Muitas das APIs que tem no Cocoa (Como o Foundation.Kit), também
tem dentro do CococaTouch.
Eu considero que esses sejam os principais frameworks que existem
dentro do Cocoa Touch.
Vou falar um pouco mais sobre cada um deles começando...
Como o nome já indica, o Foundation é a base da linguagem. Lá que se vai achar tudo,
Todos tipos primitivos, estruturas, coleções, tipos de classe e algumas coisas a mais, como classes pra acesso as portas de comunicação.
Esse framework é, basicamente, todo a API de desenvolvimento que você vai acessar. Nele tem controle de interface,
controle e indentificação de toques, processamento gráfico das telas, gerar pdf, integração com outros apps...
abrir link : https://developer.apple.com/library/ios/documentation/Uikit/reference/UIKit_Framework/index.html
Bom, esse aqui é bem simples, mas acho que deve ser um dos recursos mais usados
hoje em dia nos apps.
Como o nome indica, esse é framework responsável por mapas no iOS. Fazer marcações, determinar rotas, Encontrar endereços, enfim, TUDO.
(veja se querem perguntar alguma coisa)
O desenvolvimento com iOS foi modelado para ser MVC, e funciona (ou deveria) exatamente do jeito que você sabe. Ele também tem outros paradigmas dentro deles, como o Target Action.
O target-action é um conceito em que, basicamente, um objeto enviando uma msg para o outro. No iOS, por exemplo, os eventos de interface são definidos através desse pattern (citar exemplo touch up - button).
Delegation pra quem não sabe, é quando um objeto agi através, ou em conjunto, com outro objeto. Um bom exemplo, é a classe UITableView (http://www.codigator.com/wp-content/uploads/2013/05/15.jpg).
mostrar (http://tryobjectivec.codeschool.com/)
Objective C é a linguagem xuxuzinho da apple. Com ela você pode desenvolver tantos apps pra OS X quanto pra iOS.
Ela é orientada a objetos, fortemente tipada, criada na crista do C e tem um runtime dinâmico que permite a gente fazer
algumas coisinhas bem legais
Além disso, o Objective-C conta com umas features muito bacanas, como por exemplo blocos (rubista pira!).
Declaração de variável
Quando vamos usar uma instância de uma classe, ou seja, um objeto, devemos criar uma variavel de ponteiro.
Quando vamos usar um tipo primitivo ou uma estrutura, não é necessário criar como ponteiro, o próprio objc já consegue
gerenciar sozinho.
Estamos chamando um Macro (NSLog), vou explicar o que é mais pra frente, mas é como se fosse uma função stand-alone.
Toda vez que você cria uma classe em objective C, você vai ter dois arquivos:
Header (.h)
Basicamente, é onde você define a estrutura da sua classe. Funciona exatamente como uma interface, define toda a estrutura
da sua classe dentro dele.
Toda classe deve herdar, ao menos, de NSObject. A notação <>, serve para definir os procols que a classe vai implementar (veremos sobre protocol
mais a frente).
Implementation (.m)
Como o nome diz, ele é que vai ter a implementação da estrutura que você definiu no arquivo de header.
Explicar os tipos de properties que podem ser criadas
Atomic - Você diz que a propriedade é Thread-Safe, ou seja, somente uma thread, por vez, tem controle desse objeto. (Não pode ser compartilhado)
NonAtomic - Exatamente o oposto do atomic, você declara que a propriedade não é thread safe e pode ser alterada e acessada por diferentes threads, por esse motivo ela vira simplesmente um get,set. Por causa disso, o acesso e uso de propriedades nonatomic é mais rápido.
Strong/Retain - Necessário quando o objeto é um ponteiro. O método de setter vai incrementar o contador de ponteiros, que vai liberar o espaço no pool de memória para armazenar o objeto. Só vai sair da memória se for explicitamente dealocado (hoje não mais com o ARC lol).
Weak - Vai manter o valor até que a instância da classe seja dealocada.
Link do Quora explicando direitinho um por um: http://www.quora.com/What-is-the-difference-between-strong-retain-nonatomic-etc-in-objective-C-iOS-property
A ideia é passar por cima dos conceitos do Dynamic Runtime mais legais, e como você faz pra tirar proveito disso ;).
Tipo ID
Tipo mais genérico do objective C, pode receber qualquer coisa (bloco, selector, objetos, etc). por exemplo, você pode ter um Array (NSArray)
com index de diferentes tipos (elimando coisas como template e Generics). Outro beneficio que o ID trás, por consequência, é melhora no tempo de build (porque afinal, você não precisa ficar verificando o tipo de um objeto ID).
Distributed Objects
O conceito é que basicamente, objetos podem conversar entre sí mesmo em diferentes contextos, threads e até mesmo “servers/apps”. O conceito é de se criar um proxy entre dois objeto e estabelecer uma conexão entre eles. Todas mensagens são interceptadas por esse proxy e ele distribui através de aplicações,servers,threads. Tudo vai depender de como você definir a conexão (assunto mais profundo, n cabe no escopo desse treinamento).
Setters e Getters dinâmicos
Toda propriedade criada em uma classe gera, automaticamente, métodos de set e get. Isso é feito através do sistema de selector, que consegue definer comportamentos, sem a necessidade de especificar isso na definição do tipo do Objeto.
Key-Value Observing
Resumidamente, KVO permite que um objeto observe alterações em outro objeto e seja notificado. Utilizando o método do NSOBject addObserver,
vc define qual propriedade deve mudar para que aja a notifcação, o objeto que será o Observer e qual selector (método) vai ser invocado quando o mesmo estiver
Mostrar código do DS
O CoreData é um ORM que faz a interface com o storage do device. Ese
MyPersistentDocument - A classe mapeada no CoreData, sua instância de um managed object
NSManagedObjectContext - Esse é o lugar que serve como gateway para os seus objetos persistidos no storage. Ele vai definir toda a
api de acesso e manutenção desses objetos.