SlideShare a Scribd company logo
1 of 34
Download to read offline
iOS: Sviluppo App iPhone & 
iPad 
Dario Pizzuto 
1
iOS Design Pattern 
2
Design Pattern 
Argomenti! 
• Design Pattern: cosa sono! 
• MVC! 
• Delegation! 
• Singleton! 
• Notification 
3
Design Pattern 
4 
Cosa sono! 
• Soluzioni riusabili per problemi comuni nel 
design del software! 
• Template che permettono di definire un codice 
pulito, semplice! 
• Basati su Best Practices! 
• Nei linguaggi ad oggetti definiscono relazioni 
ed interazioni tra oggetti! 
• Esistono varie tipologie di design pattern
Model-View-Controller 
(MVC) 
5
Design Pattern 
Model-View-Controller ! 
• Design Pattern per eccellenza! 
• Si adatta a molteplici contesti! 
• Classifica gli oggetti e spinge verso la 
separazione del codice in base a dei ruoli! 
✓Model! 
✓View! 
✓Controller 
6
Design Pattern 
Model! 
• Oggetto che definisce il dato nel 
software ! 
• Descrive come manipolare il dato! 
• Es. ! 
✓ Album! 
✓Documento 
7
Design Pattern 
8 
View! 
• Oggetto che definisce la visualizzazione 
del dato ! 
• Definisce come l’utente può interagire 
con il dato! 
• Es. ! 
✓ AlbumView! 
✓DocumentoView
Design Pattern 
9 
Controller! 
• Coordinatore ! 
• Interagisce con il Model per ricevere le 
informazioni! 
• Interagisce con View per definirne la 
visualizzazione! 
• Es. ! 
✓ AlbumViewController! 
✓DocumentoViewcontroller
Design Pattern 
10 
Model View Controller
Design Pattern 
Model-View-Controller ! 
• Il Model notifica al Controller le 
variazioni del dato! 
• Il Controller aggiorna il Model in base 
ai cambiamenti recepiti dal Controller 
a partire dalla View ! 
• L’utente esegue delle azioni sulla 
11 
View
Singleton 
12
Design Pattern 
Singleton! 
• Design Pattern che assicura l’esistenza 
di una solo istanza della classe! 
• Fornisce un punto di accesso globale 
all’oggetto! 
• Usato, ad esempio, per gestire uno 
strato “light” di cache applicativa o il 
client a REST API 
13
Design Pattern 
14 
Singleton Objects! 
• Alcuni metodi che restituiscono Singleton! 
✓[NSUserDefaults 
standardUserDefaults]! 
✓[UIApplication 
sharedApplication]! 
✓[NSFileManager 
defaultManager]
Design Pattern 
Singleton! 
• In Objective-C è buona norma creare Singleton e registrare il 
metodo di classe sharedInstance! 
! 
+ (instancetype)sharedInstance {! 
static id instance;! 
static dispatch_once_t onceToken;! 
dispatch_once(&onceToken, ^{! 
instance = [[self alloc] init];! 
15 
});! 
return instance;! 
}
Design Pattern 
16 
Singleton! 
• sharedInstance assicura che vi sia una sola 
istanza della classe! 
• Controllo eseguito attraverso il blocco di codice 
dispatch_once! 
• Accedo all’istanza condivisa includendo la 
classe con la direttiva #import ed utilizzando! 
✓[SingletonClass sharedInstance]
Design Pattern 
17 
Singleton
Delegation 
18
Design Pattern 
19 
Delegation! 
• Design Pattern che “sfrutta” un altro 
oggetto per agire per conto di un oggetto! 
• Le operazioni da compiere vengono 
delegate ad un altro oggetto! 
• Utilizzato per mantenere 
l’implementazione di specifici 
comportamenti alla classe di destinazione
Design Pattern 
20 
Delegation! 
• È il pattern per eccellenza su iOS! 
• iOS è ricco di classi che sfruttano il Delegation 
Pattern! 
✓UITableView! 
✓UIScrollView! 
✓UITextField! 
✓UITextView! 
✓UIAlertView! 
✓....
Design Pattern 
21 
Delegation! 
• La classe UITableView, sfrutta il delegate 
UITableViewDelegate! 
• Il delegate si occupa di configurare i 
parametri dell’oggetto! 
• La classe che contiene la UITableView sarà 
conforme al delegate UITableViewDelegate
Design Pattern 
Delegation! 
• Esiste anche il DataSource ! 
• Usato per configurare la sorgente dati 
della classe! 
• UITableView utilizza 
UITableViewDataSource per 
configurare il numero di rows, sections, 
dimensione delle celle ed altro 
22
Design Pattern 
Esempio Delegation! 
! 
@interface 
DPPPersonaViewController : 
UIViewController<UITableViewDelega 
te,UITableViewDataSource>! 
@end 
23
Notification 
24
Design Pattern 
25 
Notification! 
• Molto usato in iOS! 
• Permette di inviare delle notifiche ad N 
osservatori! 
• Modello broadcast: lo stesso messaggio viene 
spedito a chi è in ascolto! 
• Non è necessario per il notificatore sapere chi 
sono gli osservatori! 
• Gli osservatori gestiranno singolarmente la 
manipolazione dati a seguito della ricezione 
dell’evento
Design Pattern 
Notification! 
• Strumento potente! 
• Riduce la dipendenza, in senso 
stretto, tra gli oggetti! 
• Le notifiche vengono gestite da iOS in 
modo automatico attraverso l’oggetto 
NSNotificationCenter 
26
Design Pattern 
27 
Notification
Design Pattern 
28 
Notification! 
• Per registrare un osservatore è necessario 
richiamare il metodo 
[[NSNotificationCenter 
defaultCenter] addObserver: 
selector:name:object:]; ! 
• Specificare in selector, il metodo che gestirà la 
ricezione della notifica! 
• Rimuove l’osservatore quando viene 
deallocata la classe o non vogliamo più 
ricevere notifiche sull’osservatore
Design Pattern 
Registrare una notifica 
! 
[[NSNotificationCenter defaultCenter] 
addObserver:self 
selector:@selector(manageUpdateMenuNotifi 
cation:) 
name:kMenuChangeStatusNotification 
object:nil];! 
! 
29
Design Pattern 
Emettere una notifica 
[[NSNotificationCenter defaultCenter] 
postNotificationName:kMenuChangeStatusNot 
ification object:nil];! 
30
Design Pattern 
! 
! 
- (void)manageUpdateMenuNotification:(NSNotification *) 
notification {! 
if ([[notification name] 
isEqualToString:kMenuChangeStatusNotification){ ! 
dispatch_async(dispatch_get_main_queue(),^{! 
UITableViewCell *cell = [self.tableView 
cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 
inSection:0]];! 
[cell awakeFromNib];! 
[self.tableView reloadData];! 
});! 
! }! 
} 
31 
Gestire una notifica
Design Pattern 
Rimuovere l’osservatore 
- (void)dealloc{! 
[[NSNotificationCenter 
defaultCenter]removeObserver:self 
name:kMenuChangeStatusNotification object:nil];! 
} 
32
Design Pattern 
Ulteriori approfondimenti! 
Design Pattern! 
Modal View Controller! 
Singleton! 
Delegation! 
Notification Programming 
33
Domande ? 
34

More Related Content

Similar to iOS_Course_8

Xcode - Just do it
Xcode - Just do itXcode - Just do it
Xcode - Just do itpragmamark
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store appsDotNetCampus
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaDario Rusignuolo
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaDario Rusignuolo
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaMauro Servienti
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliAndrea Della Corte
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteGiuseppe Toto
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceGiuseppe Toto
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereMatteo Valoriani
 
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
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Todi Appy Days
 

Similar to iOS_Course_8 (20)

iOS_Course_11
iOS_Course_11iOS_Course_11
iOS_Course_11
 
Xcode - Just do it
Xcode - Just do itXcode - Just do it
Xcode - Just do it
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - ita
 
iOS_Course_13
iOS_Course_13iOS_Course_13
iOS_Course_13
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - ita
 
Silverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteriaSilverlight m v-vm @ DotNetteria
Silverlight m v-vm @ DotNetteria
 
iOS_Course_4
iOS_Course_4iOS_Course_4
iOS_Course_4
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Xcode - Just do it
Xcode - Just do itXcode - Just do it
Xcode - Just do it
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
iOS_Course_6
iOS_Course_6iOS_Course_6
iOS_Course_6
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
C#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivereC#, imparare a programmare e sopravvivere
C#, imparare a programmare e sopravvivere
 
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
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
iOS_Course_2
iOS_Course_2iOS_Course_2
iOS_Course_2
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
 

More from Dario Pizzuto (10)

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_12
iOS_Course_12iOS_Course_12
iOS_Course_12
 
iOS_Course_10
iOS_Course_10iOS_Course_10
iOS_Course_10
 
iOS_Course_9
iOS_Course_9iOS_Course_9
iOS_Course_9
 
iOS_course_7
iOS_course_7iOS_course_7
iOS_course_7
 
iOS_Course_5
iOS_Course_5iOS_Course_5
iOS_Course_5
 
iOS_Course_3
iOS_Course_3iOS_Course_3
iOS_Course_3
 
iOS_Course_1
iOS_Course_1iOS_Course_1
iOS_Course_1
 

iOS_Course_8

  • 1. iOS: Sviluppo App iPhone & iPad Dario Pizzuto 1
  • 3. Design Pattern Argomenti! • Design Pattern: cosa sono! • MVC! • Delegation! • Singleton! • Notification 3
  • 4. Design Pattern 4 Cosa sono! • Soluzioni riusabili per problemi comuni nel design del software! • Template che permettono di definire un codice pulito, semplice! • Basati su Best Practices! • Nei linguaggi ad oggetti definiscono relazioni ed interazioni tra oggetti! • Esistono varie tipologie di design pattern
  • 6. Design Pattern Model-View-Controller ! • Design Pattern per eccellenza! • Si adatta a molteplici contesti! • Classifica gli oggetti e spinge verso la separazione del codice in base a dei ruoli! ✓Model! ✓View! ✓Controller 6
  • 7. Design Pattern Model! • Oggetto che definisce il dato nel software ! • Descrive come manipolare il dato! • Es. ! ✓ Album! ✓Documento 7
  • 8. Design Pattern 8 View! • Oggetto che definisce la visualizzazione del dato ! • Definisce come l’utente può interagire con il dato! • Es. ! ✓ AlbumView! ✓DocumentoView
  • 9. Design Pattern 9 Controller! • Coordinatore ! • Interagisce con il Model per ricevere le informazioni! • Interagisce con View per definirne la visualizzazione! • Es. ! ✓ AlbumViewController! ✓DocumentoViewcontroller
  • 10. Design Pattern 10 Model View Controller
  • 11. Design Pattern Model-View-Controller ! • Il Model notifica al Controller le variazioni del dato! • Il Controller aggiorna il Model in base ai cambiamenti recepiti dal Controller a partire dalla View ! • L’utente esegue delle azioni sulla 11 View
  • 13. Design Pattern Singleton! • Design Pattern che assicura l’esistenza di una solo istanza della classe! • Fornisce un punto di accesso globale all’oggetto! • Usato, ad esempio, per gestire uno strato “light” di cache applicativa o il client a REST API 13
  • 14. Design Pattern 14 Singleton Objects! • Alcuni metodi che restituiscono Singleton! ✓[NSUserDefaults standardUserDefaults]! ✓[UIApplication sharedApplication]! ✓[NSFileManager defaultManager]
  • 15. Design Pattern Singleton! • In Objective-C è buona norma creare Singleton e registrare il metodo di classe sharedInstance! ! + (instancetype)sharedInstance {! static id instance;! static dispatch_once_t onceToken;! dispatch_once(&onceToken, ^{! instance = [[self alloc] init];! 15 });! return instance;! }
  • 16. Design Pattern 16 Singleton! • sharedInstance assicura che vi sia una sola istanza della classe! • Controllo eseguito attraverso il blocco di codice dispatch_once! • Accedo all’istanza condivisa includendo la classe con la direttiva #import ed utilizzando! ✓[SingletonClass sharedInstance]
  • 17. Design Pattern 17 Singleton
  • 19. Design Pattern 19 Delegation! • Design Pattern che “sfrutta” un altro oggetto per agire per conto di un oggetto! • Le operazioni da compiere vengono delegate ad un altro oggetto! • Utilizzato per mantenere l’implementazione di specifici comportamenti alla classe di destinazione
  • 20. Design Pattern 20 Delegation! • È il pattern per eccellenza su iOS! • iOS è ricco di classi che sfruttano il Delegation Pattern! ✓UITableView! ✓UIScrollView! ✓UITextField! ✓UITextView! ✓UIAlertView! ✓....
  • 21. Design Pattern 21 Delegation! • La classe UITableView, sfrutta il delegate UITableViewDelegate! • Il delegate si occupa di configurare i parametri dell’oggetto! • La classe che contiene la UITableView sarà conforme al delegate UITableViewDelegate
  • 22. Design Pattern Delegation! • Esiste anche il DataSource ! • Usato per configurare la sorgente dati della classe! • UITableView utilizza UITableViewDataSource per configurare il numero di rows, sections, dimensione delle celle ed altro 22
  • 23. Design Pattern Esempio Delegation! ! @interface DPPPersonaViewController : UIViewController<UITableViewDelega te,UITableViewDataSource>! @end 23
  • 25. Design Pattern 25 Notification! • Molto usato in iOS! • Permette di inviare delle notifiche ad N osservatori! • Modello broadcast: lo stesso messaggio viene spedito a chi è in ascolto! • Non è necessario per il notificatore sapere chi sono gli osservatori! • Gli osservatori gestiranno singolarmente la manipolazione dati a seguito della ricezione dell’evento
  • 26. Design Pattern Notification! • Strumento potente! • Riduce la dipendenza, in senso stretto, tra gli oggetti! • Le notifiche vengono gestite da iOS in modo automatico attraverso l’oggetto NSNotificationCenter 26
  • 27. Design Pattern 27 Notification
  • 28. Design Pattern 28 Notification! • Per registrare un osservatore è necessario richiamare il metodo [[NSNotificationCenter defaultCenter] addObserver: selector:name:object:]; ! • Specificare in selector, il metodo che gestirà la ricezione della notifica! • Rimuove l’osservatore quando viene deallocata la classe o non vogliamo più ricevere notifiche sull’osservatore
  • 29. Design Pattern Registrare una notifica ! [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(manageUpdateMenuNotifi cation:) name:kMenuChangeStatusNotification object:nil];! ! 29
  • 30. Design Pattern Emettere una notifica [[NSNotificationCenter defaultCenter] postNotificationName:kMenuChangeStatusNot ification object:nil];! 30
  • 31. Design Pattern ! ! - (void)manageUpdateMenuNotification:(NSNotification *) notification {! if ([[notification name] isEqualToString:kMenuChangeStatusNotification){ ! dispatch_async(dispatch_get_main_queue(),^{! UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];! [cell awakeFromNib];! [self.tableView reloadData];! });! ! }! } 31 Gestire una notifica
  • 32. Design Pattern Rimuovere l’osservatore - (void)dealloc{! [[NSNotificationCenter defaultCenter]removeObserver:self name:kMenuChangeStatusNotification object:nil];! } 32
  • 33. Design Pattern Ulteriori approfondimenti! Design Pattern! Modal View Controller! Singleton! Delegation! Notification Programming 33