5. 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
9. 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
13. 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
15. Objective-C
15
Block
• Insieme di codice in linea
• Tipizzato
• Si usano per comporre espressioni
che possono essere passate come
parametri
16. 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
20. 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
31. 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
34. 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
37. 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
39. 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
44. 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
47. 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
49. 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
50. 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
58. 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
59. Objective-C
59
Key Value Observing - KVO
• Supponiamo di avere la seguente
situazione
• Vogliamo sapere quando il nostro
accountBalance varia
60. Objective-C
60
Key Value Observing - KVO
• l’oggetto PersonObject, registra un
observer sulla property accountBalance
• Metodo
addObserver:forKeyPath:options:context:
61. Objective-C
61
Key Value Observing - KVO
• Per ricevere la notifica, l’osservatore deve
implementare il metodo
observeValueForKeyPath:ofObject:change:context:
62. Objective-C
62
Key Value Observing - KVO
• Quando avviene il cambio di valore
nell’attributo accountBalance,
automaticamente viene notificato
all’osservatore
63. Objective-C
63
Key Value Observing - KVO
• Rimuovere observer quando viene
deallocata la classe altrimenti potremmo
generare dei leaks
• Metodo
removeObserver:forKeyPath:
64. 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