SlideShare uma empresa Scribd logo
1 de 37
MOBILE APPS
CON OBJECTIVE-C
DAY 01
12/NOVEMBRE/2011
alberto pasca | apasca@cutaway.itwww.cutaway.it
contents | day 01
 origini
 Xcode, Interface Builder, Instruments
 framework base
 sintassi
 gestione memoria
 esempi pratici
Mobile Apps con Objective-c | alberto pasca
slide 1/2810
origini
Mobile Apps con Objective-c | alberto pasca
origini
Mobile Apps con Objective-c | alberto pasca
SmallTalk + C = OOPC + frameworks = Objective-C
?GCC
ObjC
OOPC
origini - devices
Mobile Apps con Objective-c | alberto pasca
Display: 320x480
Accelerometro
Prossimità
Gps / Wifi
Bluetooth
Ram
128Mb -> 512Mb
CPU
412Mhz -> 2x800Mhz
Retina display
640x960
Display: 768x1024
Accelerometro
Prossimità
Gps / Wifi
Bluetooth
Ram
256Mb -> 512Mb
CPU
1Ghz -> 2x880Mhz
iPod - iPhone 3G / 3GS / 4 / 4S - iPad / iPad2
xcode
Mobile Apps con Objective-c | alberto pasca
Cosa vedremo…
• xcode
• configurazione
• target
• file.plist
• alberatura progetto
• interface builder
• la window
• le view
• i componenti
• IBAction
• IBOutlet
• frameworks
Lezione_00_Xcode
xcode – code
Mobile Apps con Objective-c | alberto pasca
frameworks
Mobile Apps con Objective-c | alberto pasca
Principali:
prefix
 Foundation (NS)
 UIKit (UI)
 QuartzCore (CA)
 CoreGraphics (CG)
 CoreLocation (CL)
frameworks – intro
Mobile Apps con Objective-c | alberto pasca
Librerie software che aumentano le funzionalità di una classe
http://tinyurl.com/objc-prefix
Foundation
NSObject
NSString
NSNumber
NSArray
NSDictionar
y
NSUrl
NSTimer
NSNotificati
on
NSException
[…]
frameworks
Mobile Apps con Objective-c | alberto pasca
UIKit
UIView
UIWindow
UIButton
UILabel
UITableView
UITextField
UISlider
UIWebView
UIDevice
UIEvent
[…]
CoreGraphics
CGColor
CGContext
CGFont
CGGradient
CGImage
CGLayer
CGPDFPage
[…]
frameworks
Mobile Apps con Objective-c | alberto pasca
CoreLocation
CLGeocoder
CLHeading
CLLocation
CLLocationManager
CLPlacemark
CLRegion
[…]
QuartzCore
CAAnimation
CABasicAnimation
CALayer
CAScrollLayer
CATiledLayer
CATransition
[…]
sintassi
Mobile Apps con Objective-c | alberto pasca
sintassi – variabili
#define Moltiplica(x,y) (x*y)
const int valore = 28;
int val = 0;
double val = .5;
float val = 10.;
char val = 'a';
BOOL val = YES | NO;
NSString *val = @"stringa";
id val = MyClass | MyObject;
SEL selector = @selector(MyMethod);
Mobile Apps con Objective-c | alberto pasca
Dynamic Typing
Tipi base
> ereditati dal C
Tipi speciali
> ereditati da SmallTalk
ed aggiunti in ObjC
Ogni oggetto va dicharato
come un puntatore!
sintassi – operatori
Mobile Apps con Objective-c | alberto pasca
Aritmetici
+ - * / %
Assegnamento
+= -= *= /= %=
++ --
Comparazione
== != > < >= <=
Bit
<<= >>= &= |= ^=
Ternari
[condition] ? [true] : [false]
myvar =
x == y ? y <= z ?
y : x != j ? k
>= j ? k : j : x :
"omg_i_did_again”;
sintassi – logging
Mobile Apps con Objective-c | alberto pasca
NSLog(@”Log string!”);
Formati:
 %@ -> descrizione oggetto
 %d - %u -> int / uint
 %f - %e -> float / exp
 %c - %C-> char 8b / char 16b
 %s - %S -> null-terminated char 8/16
 %p -> pointer 0x
 %x - %X -> hex lowercase/uppercase
NSLog(@”tricks: %s - %d - %s",
__FUNCTION__, __LINE__, __FILE__);
sintassi – cicli e condizioni
for ( int i=0; i<28; i++ ) {
NSLog(@"I: %d", i);
}
int i=28;
while ( i != 0 ) {
NSLog(@"I: %d", --i);
}
int i=28;
do {
NSLog(@"I: %d", i--);
} while ( i!=0 );
Mobile Apps con Objective-c | alberto pasca
if ( i==28 ){
NSLog(@"28!!!");
} else {
NSLog(@"I: %d", i);
}
switch ( i ) {
case 1:
NSLog(@"UNO");
break;
case 2:
NSLog(@"DUE");
break;
default: break;
}
FOR
WHILE
DO-WHILE
IF - ELSE
SWITCH
sintassi – enumerazioni
aClass *class = [[aClass alloc] init];
NSArray *arr = [NSArray arrayWithObjects:class, class, class, nil];
int tot = [arr count];
for ( int i=0; i<=tot; i++ )
NSLog(@"STR: %@", [arr objectAtIndex:i]);
for (aClass *c in arr)
NSLog(@"STR: %@", [c description]);
NSEnumerator *en = [arr objectEnumerator];
while (class == [en nextObject] )
[class doWork];
Mobile Apps con Objective-c | alberto pasca
CLASSICO
FOREACH
ENUM
sintassi - metodi
Senza parametri:
C -> oggetto.Metodo();
OBJC -> [oggetto Metodo];
Con parametri:
C -> oggetto.Metodo(5, "pippo");
OBJC -> [oggetto MetodoConNumero:5 andStringa:@"pippo"];
Non si chiama un metodo ma si invia un messaggio!
Mobile Apps con Objective-c | alberto pasca
- (void) Metodo;
- (void) MetodoConNumero:(int)num andStringa:(NSString*)str;
sintassi – classi (gerarchia)
NSObject
NSArray NSString UIResponder
UIView
UIControl
UITextField UISlider
UILabel
CLASSE
Descrizione astratta che
definisce il comportamento di un
oggetto.
OGGETTO
È un entità appartenente alla
classe, con un proprio stato e
comportamento.
Mobile Apps con Objective-c | alberto pasca
sintassi – classi (interface)
#import "aSuperClass.h”
#import <aSuperClass.h>
#include "aSuperClass.h”
#include <aSuperClass.h>
@class aSuperClass;
@interface MyClass: aSuperClass {
int pippo;
}
-/+ (void) mioMetodo;
@end
.H Dichiarazione di variabili e prototipi dei metodi
Mobile Apps con Objective-c | alberto pasca
inclusione lib/classi
Variabili
Metodi
sintassi – classi (implementation)
#import "MyClass.h"
@implementation MyClass
- (void) mioMetodoIstanza {
// implementazione
}
+ (void) mioMetodoDiClasse {
// implementazione
}
@end
Mobile Apps con Objective-c | alberto pasca
.M Implementazione metodi
Fine implementazione
Inizio implementazione
Implementazione metodi
sintassi – proprietà
nonatomic
+
readonly vs readwrite
+
retain vs assign vs copy
Mobile Apps con Objective-c | alberto pasca
Creano i Getters / Setters per una variabile
tramite le keywords @property (file .H) e @syntetize/@dynamic (file .M)
mutually
exclusive
sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
oggetto0x01retain
assign
oggetto0x02copy
0x01
+1
+0
+1
@property (nonatomic, assign) int CurrentGameLevel;
sintassi – proprietà
Mobile Apps con Objective-c | alberto pasca
- (void) setVal:(NSString*)v { variabile = v; }
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v copy];
}
}
- (void) setVal:(NSString*)v {
if ( v != variabile ) {
[variabile release];
variabile = [v retain];
}
}
assign
copy
retain
sintassi – oggetti
Creazione oggetti:
Auto car = new Auto();
Auto *car = [[Auto alloc] init];
Rilascio oggetti:
if (car != nil) [car release];
Mobile Apps con Objective-c | alberto pasca
Invece di invocare dei metodi, si chiede all’oggetto in questione di fare qualcosa..
alloc + init è il pattern di
defaul per creare un oggetto!
sintassi – forwarding
 Invio di messaggi ad oggetti non specificati
nell’interfaccia o addirittura non esistenti !
id delegate;
isKindOfClass - respondsToSelector
- (void) sendMessage {
if ([delegate isKindOfClass:[MyClass class]])
if ([delegate respondsToSelector:@selector(method)])
[delegate method];
- }
Mobile Apps con Objective-c | alberto pasca
sintassi – protocolli
 Callback
 Ereditarietà multipla
 Il metodo chiamato potrebbe non esistere!
 Protocolli formali / informali, o meglio…
@required e @optional
@protocol ClassDelegate
- (void) HoFinitoFaiQualcosa;
@end
Mobile Apps con Objective-c | alberto pasca
Scambiano messaggi tra le classi o le interfaccie stesse
sintassi – categorie
#import <Foundation/Foundation.h>
@interface NSString (HtmlStrings)
- (BOOL) isUrl;
@end
#import "NSString+Html.h"
@implementation NSString (HtmlStrings)
- (BOOL) isUrl {
if ( [self hasPrefix:@"http://"] )
return YES;
return NO;
}
@end
Mobile Apps con Objective-c | alberto pasca
Permettono di aggiungere funzionalità ad oggetti esistenti e compilati
Utilizzo:
#import “NSString+Html.h”
NSString *Str =
@"http://www.cutaway.it";
if ( [Str isUrl] ) return YES;
La classe NSString ha un
nuovo metodo!
sintassi – code
Mobile Apps con Objective-c | alberto pasca
Cosa vedremo…
• main
• application delegate
• view controller
• variabili
• cicli
• enumerazioni
• classi
• metodi (pubblici / privati)
• protocolli
• categorie
• properties
• debug
• log informations
Lezione_01_Sintassi
gestione della memoria
Mobile Apps con Objective-c | alberto pasca
memoria – alloc / release
Mobile Apps con Objective-c | alberto pasca
 Basata sui REFERENCE COUNT
 Oggetti creati con pattern ALLOC INIT hanno RETAIN COUNT +1
 Ogni oggetto rilasciato con RELEASE ha un RC di -1
 Quando RC è 0 viene chiamato il distruttore (dealloc)
memoria – oggetti in autorelease
Mobile Apps con Objective-c | alberto pasca
NSMutableArray *arr1 = [[NSMutableArray alloc] init];
// do somethings
[arr1 release];
NSMutableArray *arr2 = [[[NSMutableArray alloc] init] autorelease];
NSMutableArray *arr3 = [NSMutableArray array];
NSMutableArray *arr4 =
[NSMutableArray arrayWithObjects:@"a", @"b", nil];
NSMutableArray *arr5 =
[NSMutableArray alloc] initWithObjects:@"a", @"b", nil];
1
2
3
4
5
memoria - leaks
Mobile Apps con Objective-c | alberto pasca
- (void) leakyMethod {
// This is a leak
NSArray *array = [[NSArray alloc] init];
}
• MEMORY LEAK
• CLANG_STATIC_ANALYZER
• INSTRUMENTS
memoria - autorelease
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[...]
[pool drain];
[pool release]; // ci pensa il drain a fare il release in ambienti RC!
 Il pool invia automaticamente un RELEASE a tutti gli oggetti del
pool, pertanto la responsabilità di release passa al POOL.
 Command-Line App
 Cicli con molti oggetti temporanei
 Thread
Mobile Apps con Objective-c | alberto pasca
AUTORELEASE POOL
memoria – zombie
NSZombieEnabled = YES;
Mobile Apps con Objective-c | alberto pasca
1 - EXC_BAD_ACCESS
NSString *myString;
- (void)viewDidLoad {
myString = [NSString stringWithFormat:@”asd"];
NSLog(@"%@", myString); // OK
}
- (void) aMethod {
NSLog(@"%@", myString); // EXC_BAD_ACCESS
}
2 – [myString] message sent to deallocated instance 0x5633b0
Cosa vedremo…
• alloc + init
• release
• retain count
• memory leak
• autorelease
• autorelease pool
• runtime error
• EXC_BAD_ACCESS
• NSZombie
• Instruments
• debug
Lezione_02_Memoria
memoria – code
Mobile Apps con Objective-c | alberto pasca
# EOF - day 01
Coming next:
• Interfacce grafiche
• Eventi
• Foundation.framework
• Persistenza dati
• Librerie di sistema
• Librerie esterne
tks
Mobile Apps con Objective-c | alberto pasca

Mais conteúdo relacionado

Destaque

簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使う
簡単モバイルアプリ開発  クラウドベース開発環境Monacaを使う簡単モバイルアプリ開発  クラウドベース開発環境Monacaを使う
簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使うHiroki OKAZAKI
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02Alberto Pasca
 
淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践alvis-m
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.124時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1聡 中川
 
2011 Mobile & Web technologies
2011 Mobile & Web technologies 2011 Mobile & Web technologies
2011 Mobile & Web technologies JungHyuk Kwon
 
20100925 Hangame for iphone 開発秘話
20100925 Hangame for iphone 開発秘話20100925 Hangame for iphone 開発秘話
20100925 Hangame for iphone 開発秘話NHN Japan (hangame)
 
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeadsRNS
 

Destaque (7)

簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使う
簡単モバイルアプリ開発  クラウドベース開発環境Monacaを使う簡単モバイルアプリ開発  クラウドベース開発環境Monacaを使う
簡単モバイルアプリ開発 クラウドベース開発環境Monacaを使う
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 02/02
 
淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践淘宝彩票移动项目开发实践
淘宝彩票移动项目开发实践
 
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.124時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
 
2011 Mobile & Web technologies
2011 Mobile & Web technologies 2011 Mobile & Web technologies
2011 Mobile & Web technologies
 
20100925 Hangame for iphone 開発秘話
20100925 Hangame for iphone 開発秘話20100925 Hangame for iphone 開発秘話
20100925 Hangame for iphone 開発秘話
 
CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 

Semelhante a Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02

Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Davide Cerbo
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con ScalaFranco Lombardo
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritornolordarthas
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Codemotion
 
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018Codemotion
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOSGaspare Novara
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitalelostrettodigitale
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client Sabino Labarile
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++Marco Arena
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 
Cloud e iOS - Codemotion2013 Roma
Cloud e iOS - Codemotion2013 RomaCloud e iOS - Codemotion2013 Roma
Cloud e iOS - Codemotion2013 RomaFrancesco Novelli
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNetMauro Servienti
 

Semelhante a Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02 (20)

Javascript
JavascriptJavascript
Javascript
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Vb.Net
Vb.NetVb.Net
Vb.Net
 
Js intro
Js introJs intro
Js intro
 
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
Marco Arena - Perché nel 2015 parliamo ancora di C++? | Codemotion Milan 2015
 
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018
Go reactive with Realm and Xamarin Forms - Andrea Ceroni - Codemotion Rome 2018
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
Cloud e iOS - Codemotion2013 Roma
Cloud e iOS - Codemotion2013 RomaCloud e iOS - Codemotion2013 Roma
Cloud e iOS - Codemotion2013 Roma
 
.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet.Net 4.0 Preview @ UGIdotNet
.Net 4.0 Preview @ UGIdotNet
 
Java lezione1
Java lezione1Java lezione1
Java lezione1
 

Último

ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 

Último (6)

ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 

Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02

  • 1. MOBILE APPS CON OBJECTIVE-C DAY 01 12/NOVEMBRE/2011 alberto pasca | apasca@cutaway.itwww.cutaway.it
  • 2. contents | day 01  origini  Xcode, Interface Builder, Instruments  framework base  sintassi  gestione memoria  esempi pratici Mobile Apps con Objective-c | alberto pasca slide 1/2810
  • 3. origini Mobile Apps con Objective-c | alberto pasca
  • 4. origini Mobile Apps con Objective-c | alberto pasca SmallTalk + C = OOPC + frameworks = Objective-C ?GCC ObjC OOPC
  • 5. origini - devices Mobile Apps con Objective-c | alberto pasca Display: 320x480 Accelerometro Prossimità Gps / Wifi Bluetooth Ram 128Mb -> 512Mb CPU 412Mhz -> 2x800Mhz Retina display 640x960 Display: 768x1024 Accelerometro Prossimità Gps / Wifi Bluetooth Ram 256Mb -> 512Mb CPU 1Ghz -> 2x880Mhz iPod - iPhone 3G / 3GS / 4 / 4S - iPad / iPad2
  • 6. xcode Mobile Apps con Objective-c | alberto pasca
  • 7. Cosa vedremo… • xcode • configurazione • target • file.plist • alberatura progetto • interface builder • la window • le view • i componenti • IBAction • IBOutlet • frameworks Lezione_00_Xcode xcode – code Mobile Apps con Objective-c | alberto pasca
  • 8. frameworks Mobile Apps con Objective-c | alberto pasca
  • 9. Principali: prefix  Foundation (NS)  UIKit (UI)  QuartzCore (CA)  CoreGraphics (CG)  CoreLocation (CL) frameworks – intro Mobile Apps con Objective-c | alberto pasca Librerie software che aumentano le funzionalità di una classe http://tinyurl.com/objc-prefix
  • 10. Foundation NSObject NSString NSNumber NSArray NSDictionar y NSUrl NSTimer NSNotificati on NSException […] frameworks Mobile Apps con Objective-c | alberto pasca UIKit UIView UIWindow UIButton UILabel UITableView UITextField UISlider UIWebView UIDevice UIEvent […] CoreGraphics CGColor CGContext CGFont CGGradient CGImage CGLayer CGPDFPage […]
  • 11. frameworks Mobile Apps con Objective-c | alberto pasca CoreLocation CLGeocoder CLHeading CLLocation CLLocationManager CLPlacemark CLRegion […] QuartzCore CAAnimation CABasicAnimation CALayer CAScrollLayer CATiledLayer CATransition […]
  • 12. sintassi Mobile Apps con Objective-c | alberto pasca
  • 13. sintassi – variabili #define Moltiplica(x,y) (x*y) const int valore = 28; int val = 0; double val = .5; float val = 10.; char val = 'a'; BOOL val = YES | NO; NSString *val = @"stringa"; id val = MyClass | MyObject; SEL selector = @selector(MyMethod); Mobile Apps con Objective-c | alberto pasca Dynamic Typing Tipi base > ereditati dal C Tipi speciali > ereditati da SmallTalk ed aggiunti in ObjC Ogni oggetto va dicharato come un puntatore!
  • 14. sintassi – operatori Mobile Apps con Objective-c | alberto pasca Aritmetici + - * / % Assegnamento += -= *= /= %= ++ -- Comparazione == != > < >= <= Bit <<= >>= &= |= ^= Ternari [condition] ? [true] : [false] myvar = x == y ? y <= z ? y : x != j ? k >= j ? k : j : x : "omg_i_did_again”;
  • 15. sintassi – logging Mobile Apps con Objective-c | alberto pasca NSLog(@”Log string!”); Formati:  %@ -> descrizione oggetto  %d - %u -> int / uint  %f - %e -> float / exp  %c - %C-> char 8b / char 16b  %s - %S -> null-terminated char 8/16  %p -> pointer 0x  %x - %X -> hex lowercase/uppercase NSLog(@”tricks: %s - %d - %s", __FUNCTION__, __LINE__, __FILE__);
  • 16. sintassi – cicli e condizioni for ( int i=0; i<28; i++ ) { NSLog(@"I: %d", i); } int i=28; while ( i != 0 ) { NSLog(@"I: %d", --i); } int i=28; do { NSLog(@"I: %d", i--); } while ( i!=0 ); Mobile Apps con Objective-c | alberto pasca if ( i==28 ){ NSLog(@"28!!!"); } else { NSLog(@"I: %d", i); } switch ( i ) { case 1: NSLog(@"UNO"); break; case 2: NSLog(@"DUE"); break; default: break; } FOR WHILE DO-WHILE IF - ELSE SWITCH
  • 17. sintassi – enumerazioni aClass *class = [[aClass alloc] init]; NSArray *arr = [NSArray arrayWithObjects:class, class, class, nil]; int tot = [arr count]; for ( int i=0; i<=tot; i++ ) NSLog(@"STR: %@", [arr objectAtIndex:i]); for (aClass *c in arr) NSLog(@"STR: %@", [c description]); NSEnumerator *en = [arr objectEnumerator]; while (class == [en nextObject] ) [class doWork]; Mobile Apps con Objective-c | alberto pasca CLASSICO FOREACH ENUM
  • 18. sintassi - metodi Senza parametri: C -> oggetto.Metodo(); OBJC -> [oggetto Metodo]; Con parametri: C -> oggetto.Metodo(5, "pippo"); OBJC -> [oggetto MetodoConNumero:5 andStringa:@"pippo"]; Non si chiama un metodo ma si invia un messaggio! Mobile Apps con Objective-c | alberto pasca - (void) Metodo; - (void) MetodoConNumero:(int)num andStringa:(NSString*)str;
  • 19. sintassi – classi (gerarchia) NSObject NSArray NSString UIResponder UIView UIControl UITextField UISlider UILabel CLASSE Descrizione astratta che definisce il comportamento di un oggetto. OGGETTO È un entità appartenente alla classe, con un proprio stato e comportamento. Mobile Apps con Objective-c | alberto pasca
  • 20. sintassi – classi (interface) #import "aSuperClass.h” #import <aSuperClass.h> #include "aSuperClass.h” #include <aSuperClass.h> @class aSuperClass; @interface MyClass: aSuperClass { int pippo; } -/+ (void) mioMetodo; @end .H Dichiarazione di variabili e prototipi dei metodi Mobile Apps con Objective-c | alberto pasca inclusione lib/classi Variabili Metodi
  • 21. sintassi – classi (implementation) #import "MyClass.h" @implementation MyClass - (void) mioMetodoIstanza { // implementazione } + (void) mioMetodoDiClasse { // implementazione } @end Mobile Apps con Objective-c | alberto pasca .M Implementazione metodi Fine implementazione Inizio implementazione Implementazione metodi
  • 22. sintassi – proprietà nonatomic + readonly vs readwrite + retain vs assign vs copy Mobile Apps con Objective-c | alberto pasca Creano i Getters / Setters per una variabile tramite le keywords @property (file .H) e @syntetize/@dynamic (file .M) mutually exclusive
  • 23. sintassi – proprietà Mobile Apps con Objective-c | alberto pasca oggetto0x01retain assign oggetto0x02copy 0x01 +1 +0 +1 @property (nonatomic, assign) int CurrentGameLevel;
  • 24. sintassi – proprietà Mobile Apps con Objective-c | alberto pasca - (void) setVal:(NSString*)v { variabile = v; } - (void) setVal:(NSString*)v { if ( v != variabile ) { [variabile release]; variabile = [v copy]; } } - (void) setVal:(NSString*)v { if ( v != variabile ) { [variabile release]; variabile = [v retain]; } } assign copy retain
  • 25. sintassi – oggetti Creazione oggetti: Auto car = new Auto(); Auto *car = [[Auto alloc] init]; Rilascio oggetti: if (car != nil) [car release]; Mobile Apps con Objective-c | alberto pasca Invece di invocare dei metodi, si chiede all’oggetto in questione di fare qualcosa.. alloc + init è il pattern di defaul per creare un oggetto!
  • 26. sintassi – forwarding  Invio di messaggi ad oggetti non specificati nell’interfaccia o addirittura non esistenti ! id delegate; isKindOfClass - respondsToSelector - (void) sendMessage { if ([delegate isKindOfClass:[MyClass class]]) if ([delegate respondsToSelector:@selector(method)]) [delegate method]; - } Mobile Apps con Objective-c | alberto pasca
  • 27. sintassi – protocolli  Callback  Ereditarietà multipla  Il metodo chiamato potrebbe non esistere!  Protocolli formali / informali, o meglio… @required e @optional @protocol ClassDelegate - (void) HoFinitoFaiQualcosa; @end Mobile Apps con Objective-c | alberto pasca Scambiano messaggi tra le classi o le interfaccie stesse
  • 28. sintassi – categorie #import <Foundation/Foundation.h> @interface NSString (HtmlStrings) - (BOOL) isUrl; @end #import "NSString+Html.h" @implementation NSString (HtmlStrings) - (BOOL) isUrl { if ( [self hasPrefix:@"http://"] ) return YES; return NO; } @end Mobile Apps con Objective-c | alberto pasca Permettono di aggiungere funzionalità ad oggetti esistenti e compilati Utilizzo: #import “NSString+Html.h” NSString *Str = @"http://www.cutaway.it"; if ( [Str isUrl] ) return YES; La classe NSString ha un nuovo metodo!
  • 29. sintassi – code Mobile Apps con Objective-c | alberto pasca Cosa vedremo… • main • application delegate • view controller • variabili • cicli • enumerazioni • classi • metodi (pubblici / privati) • protocolli • categorie • properties • debug • log informations Lezione_01_Sintassi
  • 30. gestione della memoria Mobile Apps con Objective-c | alberto pasca
  • 31. memoria – alloc / release Mobile Apps con Objective-c | alberto pasca  Basata sui REFERENCE COUNT  Oggetti creati con pattern ALLOC INIT hanno RETAIN COUNT +1  Ogni oggetto rilasciato con RELEASE ha un RC di -1  Quando RC è 0 viene chiamato il distruttore (dealloc)
  • 32. memoria – oggetti in autorelease Mobile Apps con Objective-c | alberto pasca NSMutableArray *arr1 = [[NSMutableArray alloc] init]; // do somethings [arr1 release]; NSMutableArray *arr2 = [[[NSMutableArray alloc] init] autorelease]; NSMutableArray *arr3 = [NSMutableArray array]; NSMutableArray *arr4 = [NSMutableArray arrayWithObjects:@"a", @"b", nil]; NSMutableArray *arr5 = [NSMutableArray alloc] initWithObjects:@"a", @"b", nil]; 1 2 3 4 5
  • 33. memoria - leaks Mobile Apps con Objective-c | alberto pasca - (void) leakyMethod { // This is a leak NSArray *array = [[NSArray alloc] init]; } • MEMORY LEAK • CLANG_STATIC_ANALYZER • INSTRUMENTS
  • 34. memoria - autorelease NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [...] [pool drain]; [pool release]; // ci pensa il drain a fare il release in ambienti RC!  Il pool invia automaticamente un RELEASE a tutti gli oggetti del pool, pertanto la responsabilità di release passa al POOL.  Command-Line App  Cicli con molti oggetti temporanei  Thread Mobile Apps con Objective-c | alberto pasca AUTORELEASE POOL
  • 35. memoria – zombie NSZombieEnabled = YES; Mobile Apps con Objective-c | alberto pasca 1 - EXC_BAD_ACCESS NSString *myString; - (void)viewDidLoad { myString = [NSString stringWithFormat:@”asd"]; NSLog(@"%@", myString); // OK } - (void) aMethod { NSLog(@"%@", myString); // EXC_BAD_ACCESS } 2 – [myString] message sent to deallocated instance 0x5633b0
  • 36. Cosa vedremo… • alloc + init • release • retain count • memory leak • autorelease • autorelease pool • runtime error • EXC_BAD_ACCESS • NSZombie • Instruments • debug Lezione_02_Memoria memoria – code Mobile Apps con Objective-c | alberto pasca
  • 37. # EOF - day 01 Coming next: • Interfacce grafiche • Eventi • Foundation.framework • Persistenza dati • Librerie di sistema • Librerie esterne tks Mobile Apps con Objective-c | alberto pasca