SlideShare ist ein Scribd-Unternehmen logo
1 von 67
Downloaden Sie, um offline zu lesen
iOS: Sviluppo App iPhone &
iPad
Dario Pizzuto

1
Objective-C - 3a parte
2
Objective-C
3
Argomenti
• Array
• Dictionary
• Blocks
• Exceptions
• Key Value Coding
• Key Value Observing
Array
4
Objective-C
5
Array
• Struttura dati composta da un numero
predeterminato di variabili dello stesso tipo
• Objective-C ci fornisce la classe immutabile
NSArray e la classe mutabile
NSMutableArray
• Non possono contenere elementi nil, si usa
NSNull
Objective-C
6
Esempio NSArray
NSArray *people = [[NSArray alloc] init]
Inizializzazione con oggetti
NSArray *people = [[NSArray
arrayWithObjects:obj1, obj2, nil];
oppure
NSArray *people = @[obj1,obj2];
Objective-C
7
NSMutableArray
• Ci permette di manipolare l’array perché
un oggetto mutable
• Es
✓[mutablePeople
insertObject:obj1 atIndex:2]
Dictionary
8
Objective-C
9
Dictionary
• Struttura dati che ci permette di memorizzare
oggetti chiave - valore
• Molto efficiente
• Objective-C ci fornisce la classe immutabile
NSDictionary e la classe mutabile
NSMutableDictionary
• Non possono contenere elementi nil, si usa
NSNull
Objective-C
10
Esempio NSDictionary
NSDictionary *dictPeople = [[NSDictionary
alloc] init]
Inizializzazione con oggetti
NSDictionary *dictPeople = [[NSDictionary
dictionaryWithObjectsAndKeys:obj1, key1, obj2,
key2, nil];
oppure
NSDictionary *dictPeople =
@{key1:obj1,key2:obj2};
Objective-C
11
NSMutableDictionary
• Ci permette di manipolare il dizionario
perché è un oggetto mutable
• Es
✓[mutableDictPeople
removeObjectforKey:key1]
Let’s Code
12
Objective-C
13
Let’s Code
✦Implementare un array che contenga i
nomi dei ragazzi del corso
✦Implementare un dictionary che
contenga come chiave il numero
progressivo assegnato al vostro nome
e come valore il nome
Blocks
14
Objective-C
15
Block
• Insieme di codice in linea
• Tipizzato
• Si usano per comporre espressioni
che possono essere passate come
parametri
Objective-C
16
Block
• Sono particolarmente indicati come
gestori di Callback
• Un block può accedere alle variabili locali
• La sintassi non è intuitiva
• Disponibili da iOS 4
Objective-C
17
Dichiarazione Block
• Prevede l’uso del carattere “^”
(returnType)^(parameters);
• returnType: tipo di valore di ritorno
• parameters: parametri del blocco
Objective-C
18
Esempio Block
int (somma)^(int a, int b);
• Blocco che ritorna la somma tra a e b
Objective-C
19
Esempio Block completo
Objective-C
20
Block
• I blocchi possono leggere e
modificare variabili che stanno fuori
dal blocco
• Utilizzo della keyword __block prima
del tipo di variabile
Objective-C
21
Esempio block sola lettura
Objective-C
22
Errore Block
Objective-C
23
Corretto
Objective-C
24
Block utilizzo
• È buona norma definire un blocco con
typedef
• Può essere utilizzato “in linea” o come
parametro di un metodo
Objective-C
25
Block in linea
typedef double (^area) (double lato);
area areaQuadrato = ^(double lato){
return lato*lato;
};
Objective-C
26
Esempio Block in linea
Objective-C
27
Block parametro metodo
- (void)countString:(NSString*)match
array:(NSArray*)arrayOfString
counter:(void(^)(int counter))counter{
__block int count = 0;
[arrayOfString enumerateObjectsUsingBlock:^(id obj,
NSUInteger idx, BOOL *stop) {
if([(NSString*)obj isEqualToString:match]){
count+=1;
}
}];
counter(count);
}
Objective-C
28
Esempio Block parametro metodo
Exceptions
29
Objective-C
30
Exceptions
• Sono delle interruzioni del programma
dovute ad errori non previsti
• Quando questo accade, viene
“sollevata un’eccezione”
Objective-C
31
Exceptions
• Objective-C ci fornisce degli strumenti
per gestire gli errori imprevisti in 3 parti
1. Istruzioni sottoposte a controllo
2. Routine di controllo dell’errore
3. Blocco di codice eseguito sempre
Objective-C
32
Exceptions
@try
[instructions]
[@catch(specific exceptions)]
[@finally
[instructions] ]
Objective-C
33
Blocco try-catch-finally
• try: istruzioni da controllare
• catch: gestione dell’errore generico o
specifico
• finally: insieme di istruzioni eseguite
sempre
Objective-C
34
Exceptions
• Le eccezioni generiche vengono
identificate con la classe NSException
• Tutti i tipi di eccezione in Objective-C
sono sottoclassi di NSException
Objective-C
35
Esempio exceptions
@try {
NSArray *names =
@[@"Dario",@"Mara",@"Pino"];
NSLog(@"Name: %@",[names objectAtIndex:3]);
}
@catch (NSException *exception) {
NSLog(@"Exception: %@nReason: %@“,
[exception name], [exception reason]);
}
Objective-C
36
Esempio exception
Objective-C
37
Exceptions non gestite
• Nel caso non ci sia il blocco try-catch
per gestire l’eccezione, il programma
si interromperà (crash) e vedremo
nella console lo stacktrace completo
Objective-C
38
Esempio exception non gestita
Objective-C
39
Sollevare exceptions
• Alcune volte è utile generare un’eccezione
• Soprattutto quando realizziamo nostre API
• ES.
✓Parametri metodo a nil
✓Funzionalità non prevista da quel
determinato metodo
Objective-C
40
Sollevare exceptions
• Utilizziamo la direttiva @throw
@throw [NSException
exceptionWithName:@”Errore
parametro” reason:@”Variabile
nulla” userInfo:nil]
Objective-C
41
Exceptions personalizzate
• Se vogliamo definire una NSException
personalizzata, dobbiamo creare una
sottoclasse di quest’ultima
@interface DPPRangeException :
NSException {
...
}
Objective-C
42
Catturare exceptions multiple
• È possibile intercettare, a cascata,
eccezioni multiple
• Definiamo n @catch clause per quante
tipi di eccezioni vogliamo catturare
Objective-C
43
Exceptions multiple
@try {
NSArray *names = @[@"Dario",@"Mara",@"Pino"];
NSLog(@"Name: %@",[names objectAtIndex:3]);
}
@catch (DPPStringException *ex) {
NSLog(@"Exception: %@nReason: %@",[exception name], [exception
reason]);
}
@catch (NSException *ex){
NSLog(@"Exception generica: %@nReason: %@",[exception name],
[exception reason]);
}
Objective-C
44
Clausola finally
• Il blocco di codice all’interno della clausola
finally viene eseguito sempre in seguito alla
valutazione del blocco try
• Nel finally, troviamo spesso operazioni di di
rilascio di risorse
• Se apro un file, è inserisco nel @try le
operazioni di apertura e lettura, posso
sfruttare il @finally per chiudere il buffer
Objective-C
45
Esempio finally
.....
@try {
[self openFile];
@throw [NSException exceptionWithName:@”Errore lettura” reason:@”File non
esistente” userInfo:nil];
[self closeFile] //Mai eseguita
}
@catch (NSException *ex) {
NSLog(@"Exception: %@nReason: %@",[exception name], [exception reason]);
}
@finally {
[self closeFile]; //Chiudo lo stream
}
Let’s Code
46
Objective-C
47
Let’s Code
✦Implementare un blocco try catch
finally che gestisca l’eccezione
sollevata a runtime quando viene
ricercato un elemento in una
posizione inesistente di un array
Key Value Coding
48
Objective-C
49
Key Value Coding - KVC
• Protocol che permette l’accesso alle
properties in modo diretto tramite key
• Le keys corrispondono ai nomi delle
property
• Metodi dichiarati in NSKeyValueCoding
• Buon principio di design del codice
• Permette di semplificare il codice
Objective-C
50
Key Value Coding - KVC
• Metodo valueForKey:
✓Ritorna il valore per la key specificata
• Se la key non viene trovata, viene chiamato
il metodo valueForUndefinedKey:
✓Solleva un’eccezione di tipo
NSUndefinedKeyException
Objective-C
51
Esempio codice
- (id)tableView:(NSTableView *)tableview
objectValueForTableColumn:(id)column row:(NSInteger)row {
ChildObject *child = [childrenArray objectAtIndex:row];
if ([[column identifier] isEqualToString:@"name"]) {
return [child name];
}
if ([[column identifier] isEqualToString:@"age"]) {
return [child age];
}
if ([[column identifier] isEqualToString:@"favoriteColor"]) {
return [child favoriteColor];
}
}
Objective-C
52
Esempio codice con KVC
- (id)tableView:(NSTableView *)tableview
objectValueForTableColumn:(id)column row:
(NSInteger)row {
ChildObject *child = [childrenArray
objectAtIndex:row];
return [child valueForKey:[column
identifier]];
}
Objective-C
53
Key Value Coding - KVC
• Permette anche il set delle properties di
una classe
• Si usa setValue:forKey:
Objective-C
54
Esempio codice con KVC
MyClass *myInstance = [[MyClass
alloc] init];
[myInstance setValue:@2
forKey:@"integerProperty"];
Let’s Code
55
Objective-C
56
Let’s Code
✦Implementare il get e set di una
property di una classe a piacere
attraverso il KVC
Key Value Observing
57
Objective-C
58
Key Value Observing - KVO
• Fornisce la possibilità ad un oggetto, di
ricevere una notifica quando varia la
property di un altro oggetto
• Utile per gestire cambi di visualizzazione o
azioni all’interno della nostra App
• Funzionalità specifica di Objective-C
Objective-C
59
Key Value Observing - KVO
• Supponiamo di avere la seguente
situazione
• Vogliamo sapere quando il nostro
accountBalance varia
Objective-C
60
Key Value Observing - KVO
• l’oggetto PersonObject, registra un
observer sulla property accountBalance
• Metodo
addObserver:forKeyPath:options:context:
Objective-C
61
Key Value Observing - KVO
• Per ricevere la notifica, l’osservatore deve
implementare il metodo
observeValueForKeyPath:ofObject:change:context:
Objective-C
62
Key Value Observing - KVO
• Quando avviene il cambio di valore
nell’attributo accountBalance,
automaticamente viene notificato
all’osservatore
Objective-C
63
Key Value Observing - KVO
• Rimuovere observer quando viene
deallocata la classe altrimenti potremmo
generare dei leaks
• Metodo
removeObserver:forKeyPath:
Objective-C
64
Key Value Observing - KVO
• Non dobbiamo specificare che tipo di notifica
inviare, iOS gestisce autonomamente la
comunicazione
• Non dobbiamo implementare schemi particolari
di gestione per intercettare le modifiche
• Semplice da adottare
Objective-C
65
Ulteriori approfondimenti
NSArray reference
NSDictionary reference
Getting started with blocks
How do I declare a block in Objective-C ?
Objective-C
66
Ulteriori approfondimenti
NSException reference
Key Value Coding
Key Value Observing
Domande ?
67

Weitere ähnliche Inhalte

Was ist angesagt?

[Objective-C] - 02 Properties e Costruttori
[Objective-C] - 02 Properties e Costruttori[Objective-C] - 02 Properties e Costruttori
[Objective-C] - 02 Properties e CostruttoriJacopo Di Stanislao
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012STELITANO
 

Was ist angesagt? (9)

06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
[Objective-C] - 02 Properties e Costruttori
[Objective-C] - 02 Properties e Costruttori[Objective-C] - 02 Properties e Costruttori
[Objective-C] - 02 Properties e Costruttori
 
Array in C++
Array in C++Array in C++
Array in C++
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Array
ArrayArray
Array
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
07 1 funzioni
07 1 funzioni07 1 funzioni
07 1 funzioni
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
Eserc v del 26 marzo 2012
 Eserc v del 26 marzo 2012 Eserc v del 26 marzo 2012
Eserc v del 26 marzo 2012
 

Ähnlich wie iOS_course_7

Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013Matteo Valoriani
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Alberto Pasca
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java BaseK-Tech Formazione
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++Marco Arena
 
Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Davide Corio
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webRoberto Messora
 

Ähnlich wie iOS_course_7 (11)

Corso pratico di C# - 2013
Corso pratico di C# - 2013Corso pratico di C# - 2013
Corso pratico di C# - 2013
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
iOS_Course_5
iOS_Course_5iOS_Course_5
iOS_Course_5
 
Javascript
JavascriptJavascript
Javascript
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Effective Code Transformations in C++
Effective Code Transformations in C++Effective Code Transformations in C++
Effective Code Transformations in C++
 
Java Lezione 1
Java Lezione 1Java Lezione 1
Java Lezione 1
 
Java codestyle & tipstricks
Java codestyle & tipstricksJava codestyle & tipstricks
Java codestyle & tipstricks
 
Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.Odoo 8.0. Le nuove API.
Odoo 8.0. Le nuove API.
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 

Mehr von Dario Pizzuto (14)

iOS_Course_16
iOS_Course_16iOS_Course_16
iOS_Course_16
 
iOS_Course_15
iOS_Course_15iOS_Course_15
iOS_Course_15
 
iOS_Course_14
iOS_Course_14iOS_Course_14
iOS_Course_14
 
iOS_Course_13
iOS_Course_13iOS_Course_13
iOS_Course_13
 
iOS_Course_12
iOS_Course_12iOS_Course_12
iOS_Course_12
 
iOS_Course_11
iOS_Course_11iOS_Course_11
iOS_Course_11
 
iOS_Course_10
iOS_Course_10iOS_Course_10
iOS_Course_10
 
iOS_Course_9
iOS_Course_9iOS_Course_9
iOS_Course_9
 
iOS_Course_8
iOS_Course_8iOS_Course_8
iOS_Course_8
 
iOS_Course_6
iOS_Course_6iOS_Course_6
iOS_Course_6
 
iOS_Course_4
iOS_Course_4iOS_Course_4
iOS_Course_4
 
iOS_Course_3
iOS_Course_3iOS_Course_3
iOS_Course_3
 
iOS_Course_2
iOS_Course_2iOS_Course_2
iOS_Course_2
 
iOS_Course_1
iOS_Course_1iOS_Course_1
iOS_Course_1
 

iOS_course_7