{"id":7703,"date":"2011-09-19T14:55:43","date_gmt":"2011-09-19T12:55:43","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=7703"},"modified":"2011-09-19T14:55:43","modified_gmt":"2011-09-19T12:55:43","slug":"5-creiamo-una-semplice-calcolatrice-in-xcode-e-objective-c-parte-1","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/5-creiamo-una-semplice-calcolatrice-in-xcode-e-objective-c-parte-1\/","title":{"rendered":"5. Creiamo una semplice calcolatrice in XCode e Objective-C (parte 1)"},"content":{"rendered":"<p>Come secondo esempio per illustrare alcune nuove caratteristiche e funzionalita&#8217; del framework di sviluppo Xcode proveremo a costruire una semplice calcolatrice, utilizzando gli oggetti ed i metodi sino ad ora appresi. Successivamente, proveremo a derivare una classe dall&#8217;oggetto UIView per contenere le funzionalita&#8217; base della calcolatrice appena creata.<!--more--><\/p>\n<p>Apriamo Xcode e creiamo un nuovo progetto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-01.jpg\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-01\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-01\" width=\"368\" height=\"378\" class=\"aligncenter size-full wp-image-7707\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-01.jpg 368w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-01-292x300.jpg 292w\" sizes=\"auto, (max-width: 368px) 100vw, 368px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Scegliamo il template Window-based Application ed un nome per il nostro nuovo progetto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-02.jpg\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-02\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-02\" width=\"450\" height=\"331\" class=\"aligncenter size-full wp-image-7708\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-02.jpg 450w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-02-300x220.jpg 300w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Eliminiamo il file di risorse MainWindow.xib e modifichiamo il codice sorgente di main.m, in maniera che venga assegnata programmaticamente la nostra classe CalcolatriceAppDelegate come delegato per il protocollo UIApplicationDelegate:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\nint main(int argc, char *argv[]) {\r\n    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];\r\n    int retVal = UIApplicationMain(argc, argv, nil, @\"CalcolatriceAppDelegate\");\r\n    [pool release];\r\n    return retVal;\r\n}\r\n<\/pre>\n<p>A questo punto, possiamo procedere con l&#8217;inizializzazione a schermo della nostra applicazione. Ricordiamo che il punto di partenza del nostro codice sara&#8217; proprio il metodo applicationDidFinishLaunching:, facente parte del protocollo UIApplicationDelegate. Esso verra&#8217; interpellato non appena il sistema operativo sara&#8217; pronto per ospitare la nostra nuova applicazione.<\/p>\n<p>Navighiamo il file di intestazione (.h) della classe CalcolatriceAppDelegate ed aggiungiamo le seguenti dichiarazioni all&#8217;interfaccia:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@interface CalcolatriceAppDelegate : NSObject <UIApplicationDelegate> {\r\n    UIWindow *window;\r\n\r\n    UIView *myPanel;\r\n    UILabel *myDiplay;\r\n    NSMutableArray *operazioni;\r\n    int resultValue;\r\n    int selectedOperation;\r\n\r\n}\r\n@end\r\n<\/pre>\n<p>Tutti le variabili di istanza dichiarate con un segno di puntatore (*), saranno puntatori ad istanze di oggetti in memoria. Le due variabili intere, invece, sono variabili di tipo base, allocate staticamente in fase di creazione (alloc) della nostra classe.<\/p>\n<p>Salviamo e spostiamo il nostro editor sul file di implementazione (.m):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)applicationDidFinishLaunching:(UIApplication *)application {\r\n\r\n    \/\/make the window key and visible\r\n    [window makeKeyAndVisible];\r\n}\r\n<\/pre>\n<p>Aggiungiamo le allocazioni ed inizializzazioni dei nostri oggetti:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)applicationDidFinishLaunching:(UIApplication *)application {\r\n\r\n    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];\r\n    myPanel = [[UIView alloc] initWithFrame:window.frame];\r\n\r\n    \/\/make the window key and visible\r\n    [window makeKeyAndVisible];\r\n}\r\n<\/pre>\n<p>Il metodo bounds opera analogamente al metodo applicationFrame. La differenza consiste nell&#8217;area ritornata. Questa volta, otterremo un&#8217;area pari a tutto lo schermo del nostro iPhone, indipendentemente dalla top bar presente in alto.<br \/>\nUna volta create le istanze degli oggetti UIWindow ed UIView, possiamo procedere con l&#8217;inizializzazione della nostra applicazione. L&#8217;istanza myPanel sara&#8217; il contenitore padre per tutti gli elementi. Essa verra&#8217; aggiunta all&#8217;istanza della UIWindow per visualizzare la nostra applicazione ed i relativi oggetti a schermo.<\/p>\n<p>Utilizzando un semplice ciclo for, creiamo programmaticamente dieci bottoni con i rispettivi numeri interi. Gli oggetti UIButton verranno creati ed aggiunti alla view di riferimento ( myPanel ) dinamicamente; di conseguenza, non avremo bisogno di creare dieci variabili puntatore. A tale scopo, riutilizzeremo un&#8217;unica variabile temporanea.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-03.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-03\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-03\" width=\"550\" height=\"107\" class=\"aligncenter size-full wp-image-7709\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-03.png 700w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-03-300x58.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Gli oggetti di tipo UIButton sono creati attraverso un metodo di classe &#8211; buttonWithType:. La memoria allocata, quindi, non dovra&#8217; essere rilasciata manualmente; il blocco NSAutoreleasePool sara&#8217; responsabile del loro rilascio una volta che non saranno piu&#8217; necessari all&#8217;applicazione (ad esempio, se su di essi viene chiamato il messaggio removeFromSuperview).<\/p>\n<p>Tutti i bottoni hanno come selettore designato il metodo numberPressed:. Nell&#8217;esempio della lezione precedente ogni bottone era associato ad un selettore diverso; ogni bottone, quindi, lanciava un messaggio diverso ( @selector(firma_metodo) ). In quest&#8217;esempio, invece, utilizziamo un unico messaggio passando un parametro ( : alla fine del nome del metodo ).<\/p>\n<p>Il metodo addTarget::: puo&#8217; passare due parametri al selettore designato: l&#8217;oggetto che ha lanciato il messagio &#8211; (id)sender &#8211; e l&#8217;evento che ha causato il lancio del messaggio &#8211; (UIControlEvents)event. Entrambi i parametri sono opzionali.<\/p>\n<p>Allo stesso modo creiamo cinque oggetti UIButton, responsabili della scelta dell&#8217;operazione aritmetica da effettuare. L&#8217;unica differenza con il passo precedente consiste nell&#8217;inserimento di ognuna delle rispettive stringhe, rappresentative dell&#8217;operazione ( +, -, *, \/, = ), in un array.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-04.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-04\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-04\" width=\"550\" height=\"166\" class=\"aligncenter size-full wp-image-7710\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-04.png 689w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-04-300x90.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Aggiungiamo, infine, l&#8217;allocazione ed inizializzazione di un oggetto UILabel. Esso costituira&#8217; il display della nostra calcolatrice. L&#8217;oggetto e&#8217; allocato ed inizializzato a schermo con una coppia alloc\/init; sara&#8217; necessario rilasciare la memoria dopo aver aggiunto l&#8217;oggetto alla UIView parent.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-05.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-05\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-05\" width=\"437\" height=\"107\" class=\"aligncenter size-full wp-image-7711\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-05.png 437w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-05-300x73.png 300w\" sizes=\"auto, (max-width: 437px) 100vw, 437px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Utilizzo dei parametri passati dal selettore<\/h4>\n<p>Utilizzando il parametro (id) sender potremo gestire la pressione di bottoni differenti. A tal proposito, effettueremo un cast a tipo UIButton della variabile generica sender. Nota che ogni bottone puo&#8217; essere identificato univocamente dalla sua etichetta, rappresentante il corrispondente valore intero (currentTitle).<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-06.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-06\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-06\" width=\"550\" height=\"121\" class=\"aligncenter size-full wp-image-7712\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-06.png 569w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-06-300x65.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Le operazioni di &#8220;selezione operatore&#8221; verranno gestite da un metodo analogo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-07.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-07\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-07\" width=\"498\" height=\"431\" class=\"aligncenter size-full wp-image-7713\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-07.png 498w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-07-300x259.png 300w\" sizes=\"auto, (max-width: 498px) 100vw, 498px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Subclassing di UIView<\/h4>\n<p>Se osserviamo il codice sopra, ci accorgeremo del fatto che sarebbe molto utile ed elegante poter racchiudere tutte le operazioni di inizializzazione e controllo del tastierino e del display, attraverso un unico oggetto. A tal proposito, sara&#8217; necessario estendere l&#8217;oggetto UIView, derivandone un nuovo oggetto che chiameremo CalculatorView. Il nuovo oggetto sara&#8217; responsabile della creazione di tutti gli elementi necessari alla calcolatrice (bottoni e display) e delle operazioni ad essa associate.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-08.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-08\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-08\" width=\"224\" height=\"90\" class=\"aligncenter size-full wp-image-7714\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Per estendere la classe UIView bastera&#8217; far seguire il suo nome al segno di due punti ( : ) nella dichiarazione di interfaccia. Tutti i puntatori ad istanze di oggetti che avevamo dichiarato nell&#8217;interfaccia della classe CalcolatriceAppDelegate, saranno spostati nella nuova dichiarazione di interfaccia; essi diventeranno parte integrante del nuovo oggetto. Al loro posto, nella dichiarazione di interfaccia del delegato, indicheremo un unico puntatore ad oggetto di tipo CalculatorView.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-09.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-09\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-09\" width=\"436\" height=\"63\" class=\"aligncenter size-full wp-image-7715\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-09.png 436w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-09-300x43.png 300w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>La classe CalcolatriceAppDelegate, non ha nozione della nuova classe introdotta in quest&#8217;esempio; per ovviare a questo problema, dovremo apportare una modifica utilizzando una nuova direttiva: <strong>@class<\/strong>.<\/p>\n<h4>La direttiva @class<\/h4>\n<p>L&#8217;uso della direttiva @class risulta necessario quando bisogna fornire ad una classe informazioni relative ad altre classi\/oggetti, facenti parte del nostro progetto. Sebbene potremmo importare il file di intestazione, relativo alla classe a cui intendiamo riferirci, l&#8217;uso della direttiva @class risulta molto piu&#8217; efficiente. Il compilatore, infatti, non ha bisogno di processare tutto il file di intestazione; esso deve solo sapere che CalculatorView e&#8217; il nome di una classe che fa parte del nostro attuale progetto.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-10.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-10\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-10\" width=\"439\" height=\"156\" class=\"aligncenter size-full wp-image-7716\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-10.png 439w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-10-300x106.png 300w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>E&#8217; bene notare che se avremo bisogno di riferirci a metodi della classe CalculatorView e\/o a sue variabili d&#8217;istanza, la direttiva @class non risultera&#8217; sufficiente. Essa, infatti, istruisce il compilatore con la nozione di forward declaration, ma non puo&#8217; sostituire l&#8217;importazione (e sua valutazione) del file di intestazione\/interfaccia della classe. In questo caso, sara&#8217; necessario aggiungere al file di implementazione della classe che fa uso di una forward declaration, la direttiva di importazione della classe corrispondente.<\/p>\n<p>Nel nostro caso, la classe CalculatorView non espone nessuna variabile (@property\/@synthesize) o metodo d&#8217;istanza. L&#8217;importazione del suo file di interfaccia, quindi, risultera&#8217; superfluo. Tuttavia, puo&#8217; essere utile vedere la sua ubicazione all&#8217;interno del file di implementazione della classe CalcolatriceAppDelegate.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-11.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-11\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-11\" width=\"539\" height=\"268\" class=\"aligncenter size-full wp-image-7717\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-11.png 539w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-11-300x149.png 300w\" sizes=\"auto, (max-width: 539px) 100vw, 539px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>E&#8217; interessante notare come la nuova versione del metodo applicationDidFinishLaunching: sia molto piu&#8217; snella ed elegante; semplicemente, vengono allocati i due oggetti (window e myCalculatorView), necessari al corretto funzionamento dell&#8217;applicazione. La parte &#8220;pensante&#8221; e&#8217; stata spostata nella nuova classe, che eredita ed estende le proprieta&#8217; dell&#8217;oggetto UIView. Pensare ad oggetti e&#8217; un passo essenziale nella corretta progettazione ed implementazione di un&#8217;applicazione.<\/p>\n<h4>Overriding dei Metodi<\/h4>\n<p>Resta ancora da spostare il codice che prima stava nel metodo applicationDidFinishLaunching:. Per far questo, introdurremo il concetto di riscrittura o overriding di un metodo.<\/p>\n<p>Se osserviamo il metodo applicationDidFinishLaunching riscritto sopra, noteremo che nell&#8217;inizializzazione dell&#8217;oggetto CalculatorView non intervengono metodi nuovi. Il &#8220;tradizionale&#8221; metodo di initWithFrame svolge egregiamente il suo dovere. Perche&#8217; cio&#8217; avvenga, tuttavia, e&#8217; necessario sovrascrivere il metodo della classe padre con una nuova versione, atta a gestire le caratteristiche proprie della nostra nuova classe.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-12.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-12\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-12\" width=\"546\" height=\"553\" class=\"aligncenter size-full wp-image-7718\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-12.png 546w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-12-296x300.png 296w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>La prima cosa da fare e&#8217; assicurarsi che l&#8217;inizializzazione della classe padre sia completata con successo. Estendere una classe significa ereditare tutte le sue caratteristiche base, aggiungendo alcune funzionalita&#8217;. Dovremo, quindi, per prima cosa inizializzare la parte ereditata dalla classe UIView. Utilizzeremo la keyword <strong>super<\/strong> per riferirci alla parte ereditata. Se l&#8217;inizializzazione della parte base e&#8217; completata con successo, possiamo continuare con l&#8217;inizializzazione di tutti i componenti privati.<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\nif (self = [super initWithFrame:frame]) {\r\n   ...\r\n}\r\n<\/pre>\n<p>Alla fine, ritorneremo self : la nuova istanza di classe con tutte le sue componenti correttamente inizializzate.<\/p>\n<h4>Il metodo dealloc<\/h4>\n<p>E&#8217; necessaria un&#8217;ultima aggiunta al codice della nostra nuova classe. Il codice di inizializzazione della nuova classe non rilascia l&#8217;oggetto NSMutableArray, allocato per tenere traccia delle operazioni disponibili nella calcolatrice. Visto che trattasi di un oggetto necessario per tutta la durata di vita del nostro oggetto CalculatorView, esso andra&#8217; rilasciato solo in fase di deallocazione ( dealloc: ) della nostra classe. Il metodo dealloc, infatti, viene chiamato non appena l&#8217;oggetto e&#8217; rimosso dallo schermo con una chiamata al metodo removeFromSuperview della superclasse UIView.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/creare-una-calcolatrice-XCode-Objective-C-parte-1-13.png\" alt=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-13\" title=\"creare-una-calcolatrice-XCode-Objective-C-parte-1-13\" width=\"170\" height=\"67\" class=\"aligncenter size-full wp-image-7706\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Riferimenti<\/h4>\n<ul>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/iPhone\/Conceptual\/iPhoneOSProgrammingGuide\/Introduction\/Introduction.html\" target=\"_blank\">iOS Developer Library: iOS Application Programming Guide<\/a><\/li>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/WindowsViews\/Conceptual\/ViewPG_iPhoneOS\/Introduction\/Introduction.html\" target=\"_blank\">iOS Developer Library: View Programming Guide for iOS<\/a><\/li>\n<li><a href=\"http:\/\/www.amazon.it\/gp\/product\/0596154054\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=de0d-21&#038;linkCode=as2&#038;camp=3370&#038;creative=23322&#038;creativeASIN=0596154054\" target=\"_blank\">iPhone SDK Application Development \u2013 Capitolo 3<\/a><\/li>\n<li><a href=\"http:\/\/www.amazon.it\/Programming-Objective-C-2-0-Developers-Library\/dp\/0321566157\" target=\"_blank\">Programming in Objective-C: Capitoli 7 e 8<\/a><\/li>\n<\/ul>\n<p><center><br \/>\n<a href=\"http:\/\/itunes.apple.com\/it\/app\/strips\/id463424148?mt=8\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/Strips.jpg\" alt=\"Strips-iPhone\" title=\"Strips-iPhone\" width=\"468\" height=\"234\" class=\"aligncenter size-full wp-image-7720\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/Strips.jpg 468w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/09\/Strips-300x150.jpg 300w\" sizes=\"auto, (max-width: 468px) 100vw, 468px\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Come secondo esempio per illustrare alcune nuove caratteristiche e funzionalita&#8217; del framework di sviluppo Xcode proveremo a&#8230;<\/p>\n","protected":false},"author":476,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[605],"tags":[479,926,929,928,927,925,913],"class_list":["post-7703","post","type-post","status-publish","format-standard","hentry","category-guida-rapida-alla-programmazione-cocoa-touch","tag-costantino-pistagna","tag-direttiva-class-xcode","tag-keyword-super-objective-c","tag-metodo-dealloc-objective-c","tag-overriding-dei-metodi-objective-c","tag-subclassing-di-uiview-xcode","tag-windows-8-dev-preview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7703","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/476"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=7703"}],"version-history":[{"count":16,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7703\/revisions"}],"predecessor-version":[{"id":7781,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/7703\/revisions\/7781"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=7703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=7703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=7703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}