SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
Introdução ao
Objective-C
Thursday, June 13, 13
Overview
Oriunda do C e do Smalltalk
Linguagem da NeXT para o NeXTSTEP OS
Orientado à objetos
Tipada
Thursday, June 13, 13
Thursday, June 13, 13
a linguagem
Thursday, June 13, 13
non-ARC vs ARC
Automatic Reference Counting
Thursday, June 13, 13
Interfaces (.h) and
Implementations (.m)
Thursday, June 13, 13
Interfaces (.h)
Thursday, June 13, 13
Implementations (.m)
Thursday, June 13, 13
@property
Objeto que nada mais é que uma propriedade
de uma classe e que possui um getter e um
setter.
Definição
@property (nonatomic, strong) NSString *name;
@property (nonatomic) int age;
Thursday, June 13, 13
@property
@synthesize
@implementation Ship
@synthesize name = _name;
@synthesize age = _age;
// ... implemetações dos métodos
- (BOOL)takeOff
{
// ...
}
@end
Thursday, June 13, 13
@property
@synthesize name = _name é o mesmo que:
@implementation Ship
// ... implemetações dos métodos
- (BOOL)takeOff
{
// ...
}
- (NSString *)name
{
return _name; // ou self.name (cuidado!)
}
- (void)setName:(NSString *)name
{
_name = name; // ou self.name = name (cuidado!)
}
@end
Thursday, June 13, 13
Dot Notation
dado o objeto...
@interface Ship
@property (nonatomic, strong) NSString *name;
@property (nonatomic) int width;
@end
...podemos acessar suas properties:
Ship *ship = [[Ship alloc] init];
ship.name = @”Nave da Xuxa”;
ship.width = 50;
NSLog(@”%@ tem %d metros de largura”, ship.name, ship.width);
Thursday, June 13, 13
strong vs weak
strong
matenha esse cara na heap até eu não
apontar mais pra ele
weak
matenha enquanto alguém apontar pra ele
“strongly”
Thursday, June 13, 13
tipos primitivos
Herda os tipos primitivos do C
int
float
char
boolean
Thursday, June 13, 13
nil
É o valor de um objeto que não aponta para
nada
id obj = nil;
NSString *hello = nil;
É como o “zero” para um tipo primitivo
Pode ser testado num if
if (obj) { ... }
Pode enviar mensagens para nil (na maioria
das vezes é ok)
int i = [obj metodoQueRetornaUmInteiro]
// se obj é nil, i = 0
Thursday, June 13, 13
BOOL
typedef para o tipo boolean em Objective-C
if (flag) { ... }
if (!flag) { ... }
YES e NO
if (flag == YES) { ... }
if (flag != NO) { ... }
Thursday, June 13, 13
Instance vs class
methods
de instância: definidos com um “-”
- (BOOL)dropBomb:(Bomb *)bomb
at:(CGPoint)position
from:(double)altitude;
de classe: definidos com um “+”
+ (Ship *)motherShip;
Thursday, June 13, 13
Instance vs class
methods
de instância
Ship *ship = [[Ship alloc] init];
BOOL destroyed = [ship dropBomb:bomb1 at:dropPoint from:300.0];
de classe
Ship *motherShip = [Ship motherShip];
Thursday, June 13, 13
Instance vs class
methods
de instância
self/super é a instância sendo chamada
de classe
self/super é a classe
Thursday, June 13, 13
Métodos
Mais exemplos
- (double)performOperation:(NSString *)operation;
- (NSMutableArray *)operandStack;
- (NSString *)stringByAppendingString:(NSString *)s;
- (void)doSomething;
- (NSComparisonResult)compare:(NSString *)aString
options:(Options)mask
mask:(NSRange)range;
Thursday, June 13, 13
Instâncias
alloc & init
NSMutableArray *stack = [[NSMutableArray alloc] init];
alloc é um método de class
init é o construtor base
Thursday, June 13, 13
Instâncias
Criando seu próprio init
@implementation MyObject
- (id)init
{
self = [super init];
if (self) {
// custom stuff
}
return self;
}
@end
Thursday, June 13, 13
Foundation Framework
Thursday, June 13, 13
NSObject
- (NSString *)description;
- (id)copy;
- (id)mutableCopy;
Thursday, June 13, 13
NSString
Serve como o tipo (char *) do C
Representada por @”minha string”
NSString *minhaString = @”minha string”;
Imutável
Thursday, June 13, 13
NSMutableString
Mutável :)
Porém raramente usada. Em geral, a instância
de NSString é liberada no final do escopo
- (void)fazAlgumaCoisa
{
NSString *minhaString = @”minha string”;
...
} // minhaString foi “released”
Thursday, June 13, 13
NSArray
Coleção ordenada de objetos
Imutável (não consigo adicionar/remover objetos)
Pq é bom? Mais leve.
NSArray *meuArray = [[NSArray alloc] init];
NSArray *outroArray = [NSArray arrayWithObjects:
@”Flamengo”, @”Vasco”, @“Botafogo”, @”Fluminense”, nil];
NSArray *array = @[@”Fla”, @“Flu”, @“Vasco”, @“Botafogo”];
Thursday, June 13, 13
NSMutableArray
Mutável :)
Possui todos os métodos de NSArray
Mais pesado
NSMutableArray *array = @[@”Fla”, @“Flu”, @“Vasco”,
@“Botafogo”];
[array addObject:@”Friburguense”];
[array removeLastObject];
[array insertObject:meuObjeto atIndex:3];
array[1] = @”Madureira”;
Thursday, June 13, 13
NSDictionary
Mapeamento chave-valor
Imutável
NSDictionary *dict = [NSDictionary
dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:
27], @”idade”, nil];
NSDictionary *dict = @{
@”idade”: @27
};
Thursday, June 13, 13
NSMutableDictionary
Mutável :)
NSMutableDictionary *dict = [NSDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:27], @”idade”,
nil];
[dict setObject:@”Gustavo” forKey:@”nome”];
dict[@”nome”] = @”Gustavo”;
Thursday, June 13, 13
Outras classes
NSSet / NSMutableSet
NSOrderedSet / NSMutableOrderedSet
NSNumber
NSValue
NSData
NSDate
Thursday, June 13, 13
NSObrigado
Thursday, June 13, 13

Mais conteúdo relacionado

Destaque

Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...Alexandra Betances
 
Poverty Venture Team BB44th C2
Poverty Venture Team BB44th C2Poverty Venture Team BB44th C2
Poverty Venture Team BB44th C2Bernard Sng
 
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝schoowebcampus
 
Mobile technology Challenges And Case Studies Shivam mishra
Mobile technology Challenges And Case Studies Shivam mishraMobile technology Challenges And Case Studies Shivam mishra
Mobile technology Challenges And Case Studies Shivam mishrashivam mishra
 
FOUR51 -Forester TLP
FOUR51 -Forester TLPFOUR51 -Forester TLP
FOUR51 -Forester TLPRichard Booth
 
Sapion Presentation
Sapion PresentationSapion Presentation
Sapion PresentationPeter Pollyn
 
La informatica y la educacion
La informatica y la educacionLa informatica y la educacion
La informatica y la educacionmodestavg
 
Lighting design lecture
Lighting design lectureLighting design lecture
Lighting design lectureHytham Bardecy
 
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trời
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trờiHướng dẫn lắp đặt máy nước nóng năng lượng mặt trời
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trờiLong Nguyen
 
Eitc team 1 of v3 annotated bibliography
Eitc team 1 of v3  annotated bibliographyEitc team 1 of v3  annotated bibliography
Eitc team 1 of v3 annotated bibliographyJash Mehta
 
Presentation about China Exhibition Industry
Presentation about China Exhibition IndustryPresentation about China Exhibition Industry
Presentation about China Exhibition IndustryChristopher Kappes
 

Destaque (16)

Clean code
Clean codeClean code
Clean code
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...
Análisis del cumplimiento de las funciones establecidas en la Ley 139-01 de E...
 
Poverty Venture Team BB44th C2
Poverty Venture Team BB44th C2Poverty Venture Team BB44th C2
Poverty Venture Team BB44th C2
 
School PLUS
School PLUS School PLUS
School PLUS
 
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝
ハイジ・インターフェイスに学ぶ、良いインターフェイスのつくり方 先生:美馬 直輝
 
Mobile technology Challenges And Case Studies Shivam mishra
Mobile technology Challenges And Case Studies Shivam mishraMobile technology Challenges And Case Studies Shivam mishra
Mobile technology Challenges And Case Studies Shivam mishra
 
FOUR51 -Forester TLP
FOUR51 -Forester TLPFOUR51 -Forester TLP
FOUR51 -Forester TLP
 
Sapion Presentation
Sapion PresentationSapion Presentation
Sapion Presentation
 
La informatica y la educacion
La informatica y la educacionLa informatica y la educacion
La informatica y la educacion
 
Miguel08
Miguel08Miguel08
Miguel08
 
Lighting design lecture
Lighting design lectureLighting design lecture
Lighting design lecture
 
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trời
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trờiHướng dẫn lắp đặt máy nước nóng năng lượng mặt trời
Hướng dẫn lắp đặt máy nước nóng năng lượng mặt trời
 
Eitc team 1 of v3 annotated bibliography
Eitc team 1 of v3  annotated bibliographyEitc team 1 of v3  annotated bibliography
Eitc team 1 of v3 annotated bibliography
 
Presentation about China Exhibition Industry
Presentation about China Exhibition IndustryPresentation about China Exhibition Industry
Presentation about China Exhibition Industry
 
Web 2
Web 2Web 2
Web 2
 

Último

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Introdução ao Objective-C

  • 2. Overview Oriunda do C e do Smalltalk Linguagem da NeXT para o NeXTSTEP OS Orientado à objetos Tipada Thursday, June 13, 13
  • 5. non-ARC vs ARC Automatic Reference Counting Thursday, June 13, 13
  • 6. Interfaces (.h) and Implementations (.m) Thursday, June 13, 13
  • 9. @property Objeto que nada mais é que uma propriedade de uma classe e que possui um getter e um setter. Definição @property (nonatomic, strong) NSString *name; @property (nonatomic) int age; Thursday, June 13, 13
  • 10. @property @synthesize @implementation Ship @synthesize name = _name; @synthesize age = _age; // ... implemetações dos métodos - (BOOL)takeOff { // ... } @end Thursday, June 13, 13
  • 11. @property @synthesize name = _name é o mesmo que: @implementation Ship // ... implemetações dos métodos - (BOOL)takeOff { // ... } - (NSString *)name { return _name; // ou self.name (cuidado!) } - (void)setName:(NSString *)name { _name = name; // ou self.name = name (cuidado!) } @end Thursday, June 13, 13
  • 12. Dot Notation dado o objeto... @interface Ship @property (nonatomic, strong) NSString *name; @property (nonatomic) int width; @end ...podemos acessar suas properties: Ship *ship = [[Ship alloc] init]; ship.name = @”Nave da Xuxa”; ship.width = 50; NSLog(@”%@ tem %d metros de largura”, ship.name, ship.width); Thursday, June 13, 13
  • 13. strong vs weak strong matenha esse cara na heap até eu não apontar mais pra ele weak matenha enquanto alguém apontar pra ele “strongly” Thursday, June 13, 13
  • 14. tipos primitivos Herda os tipos primitivos do C int float char boolean Thursday, June 13, 13
  • 15. nil É o valor de um objeto que não aponta para nada id obj = nil; NSString *hello = nil; É como o “zero” para um tipo primitivo Pode ser testado num if if (obj) { ... } Pode enviar mensagens para nil (na maioria das vezes é ok) int i = [obj metodoQueRetornaUmInteiro] // se obj é nil, i = 0 Thursday, June 13, 13
  • 16. BOOL typedef para o tipo boolean em Objective-C if (flag) { ... } if (!flag) { ... } YES e NO if (flag == YES) { ... } if (flag != NO) { ... } Thursday, June 13, 13
  • 17. Instance vs class methods de instância: definidos com um “-” - (BOOL)dropBomb:(Bomb *)bomb at:(CGPoint)position from:(double)altitude; de classe: definidos com um “+” + (Ship *)motherShip; Thursday, June 13, 13
  • 18. Instance vs class methods de instância Ship *ship = [[Ship alloc] init]; BOOL destroyed = [ship dropBomb:bomb1 at:dropPoint from:300.0]; de classe Ship *motherShip = [Ship motherShip]; Thursday, June 13, 13
  • 19. Instance vs class methods de instância self/super é a instância sendo chamada de classe self/super é a classe Thursday, June 13, 13
  • 20. Métodos Mais exemplos - (double)performOperation:(NSString *)operation; - (NSMutableArray *)operandStack; - (NSString *)stringByAppendingString:(NSString *)s; - (void)doSomething; - (NSComparisonResult)compare:(NSString *)aString options:(Options)mask mask:(NSRange)range; Thursday, June 13, 13
  • 21. Instâncias alloc & init NSMutableArray *stack = [[NSMutableArray alloc] init]; alloc é um método de class init é o construtor base Thursday, June 13, 13
  • 22. Instâncias Criando seu próprio init @implementation MyObject - (id)init { self = [super init]; if (self) { // custom stuff } return self; } @end Thursday, June 13, 13
  • 24. NSObject - (NSString *)description; - (id)copy; - (id)mutableCopy; Thursday, June 13, 13
  • 25. NSString Serve como o tipo (char *) do C Representada por @”minha string” NSString *minhaString = @”minha string”; Imutável Thursday, June 13, 13
  • 26. NSMutableString Mutável :) Porém raramente usada. Em geral, a instância de NSString é liberada no final do escopo - (void)fazAlgumaCoisa { NSString *minhaString = @”minha string”; ... } // minhaString foi “released” Thursday, June 13, 13
  • 27. NSArray Coleção ordenada de objetos Imutável (não consigo adicionar/remover objetos) Pq é bom? Mais leve. NSArray *meuArray = [[NSArray alloc] init]; NSArray *outroArray = [NSArray arrayWithObjects: @”Flamengo”, @”Vasco”, @“Botafogo”, @”Fluminense”, nil]; NSArray *array = @[@”Fla”, @“Flu”, @“Vasco”, @“Botafogo”]; Thursday, June 13, 13
  • 28. NSMutableArray Mutável :) Possui todos os métodos de NSArray Mais pesado NSMutableArray *array = @[@”Fla”, @“Flu”, @“Vasco”, @“Botafogo”]; [array addObject:@”Friburguense”]; [array removeLastObject]; [array insertObject:meuObjeto atIndex:3]; array[1] = @”Madureira”; Thursday, June 13, 13
  • 29. NSDictionary Mapeamento chave-valor Imutável NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt: 27], @”idade”, nil]; NSDictionary *dict = @{ @”idade”: @27 }; Thursday, June 13, 13
  • 30. NSMutableDictionary Mutável :) NSMutableDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:27], @”idade”, nil]; [dict setObject:@”Gustavo” forKey:@”nome”]; dict[@”nome”] = @”Gustavo”; Thursday, June 13, 13
  • 31. Outras classes NSSet / NSMutableSet NSOrderedSet / NSMutableOrderedSet NSNumber NSValue NSData NSDate Thursday, June 13, 13