Corso interattivo di programmazione per iPhone: V Lezione. Utilizziamo gli oggetti NS

Dopo aver capito come dichiarare un oggetto e come funziona a grandi linee la memoria, oggi trattero` l’ utilizzo di alcuni oggetti di Cocoa, come gli Stringhe, Array, Timer.

corsoiphoneitalia1

Cominciamo dall’ oggetto stringa: NSString.

Il vantaggio di utilizzare oggetti NSString e` di poter usufruire dei metodi di questo oggetto. E` buona abitudine conoscere un oggetto tramite la sua interfaccia. Per far questo apriamo la documentazione tramite XCode o cliccate direttamente sul link NSString.

picture-11

Cerchiamo di capire come leggere l’ interfaccia. Vediamo come prima cosa che l’ oggetto NSString e` una sottoclasse dell’ oggetto generico NSObject. In altre parole l’ oggetto NSString  inherits (eredita) le caratteristiche della sua super class NSObject.

Quindi possiamo utilizzare i metodi dell’ oggetto padre NSObject.

picture-4

Concentriamoci ora sui metodi dell’ oggetto NSString. Vediamo come prima cosa la parte dell’ interfaccia che serve per creare un oggetto NSString.

picture-5

Differenza tra metodi + e – (metodi statici e non)

Come prima cosa notiamo che alcuni metodi sono dichiarati con un + davanti e altri con un – .

I metodi con il “+” davanti sono chiamati metodi statici. Sono metodi che NON si riferiscono ad un specifico oggetto. Infatti per usufruire di questi metodi sara` necessario chiamarli in questo modo

[NSString metodoStatico]

proprio perche` il metodoStatico non usufruisce dei dati di un oggetto specifico, bensi` dato un argomento, ritorna un output (quello che fa una classica funzione).

Vediamo piu` in dettaglio.

Quando inizializziamo un oggetto, in questo caso una stringa, con il classico alloc, init

picture-8

notiamo che alloc e` statico e init non e` statico. Questo lo si vede anche dall’ interfaccia di NSObject.

picture-9

Ogni oggetto solitamente riscrive il metodo init per riadattarlo alle proprie esigenze. Sara` sufficiente riscrivere il metodo -init

Ecco un piccolo esempio

picture-10

I metodi con il “-” davanti invece non sono statici. Questo significa che si riferiscono ad un oggetto specifico. Posso quindi aver accesso alle variabili interne, modificare alcuni oggetti, restituire (return) dei valori in funzione delle variabile/oggetti interni all’ oggetto in questione.

Consideriamo ora il metodo statico per inizializzare una stringa

picture-111

Il metodo statico stringWithFormat permette di inizializzare una stringa con le regole di formattazione che trovate in questo link:  Formatting String Objects

Un esempio.

picture-14

Output

picture-121

Notiamo che %d viene sostituito con il secondo argomento (numeroIntero), %@ con il terzo argomento (@”stringa”) e %g con il quarto.

%d : numeri interi

%f , %g : float

%s: stringa C


+stringWithUTF8String:(const char*)bytes;

Questo metodo permette di inizializzare un oggetto NSString, partendo dalla classica stringa C del tipo:

char *stringaC = “Hello World”;

Esempio

picture-16

Output

picture-15

Lunghezza di una stringa

picture-17

Esempio

picture-19

Output

picture-18

NSArray, NSMutableArray

Prima di poter continuare a studiare i metodi di NSString dobbiamo conoscere prima questa struttura dati: l’ Array.

Definizione su Wikipedia: http://it.wikipedia.org/wiki/Array

In modo molto semplice possiamo pensare all’ Array come ad una lista di oggetti.

La differenza tra un oggetto NSArray e un NSMutableArray e` che Mutable puo` esser modificato, aggiungendo e rimuovendo gli oggetti, l’ NSArray non puo` esser modificato, si ha quindi un accesso agli oggetti ma non e` possibile aggiungerne nuovi o rimuoverne alcuni.

Interfaccia di NSArray : NSArray

Interfaccia di NSMutableArray : NSMutableArray

Quello che notiamo subito guardando NSMutableArray, e` che ci sono dei metodi che non ci sono in NSArray.

picture-22

Questi metodi infatti servono a modificare la struttura dell’ array. Vediamo piu` in dettaglio, tramite un esempio, come si comporta un Array. In questo esempio trattero` un Array di oggetti NSString, ma sia chiaro : e` possibile fare un Array di qualsiasi tipo di oggetto: NSNumber, Car (l’ oggetto programmato da noi nelle lezioni precedenti) etc…

picture-23

Output

picture-24

E` possibile utilizzare un modo piu` semplice per “scorrere” l’ array.

picture-25

Questo ciclo for ha lo stesso identico output di quello precedente.

Aggiungere un oggetto in un array aggiunge il suo retainCount. Vediamo

picture-32

Output

picture-33

Ora che abbiamo visto il funzionamento basilare di un array, vediamo un interessante metodo della classe NSString.

(NSArray *)componentsSeparatedByString:(NSString *)separator

picture-26

Questo metodo permette di dividere una stringa in piu` sottostringhe, selezionando la stringa separatrice. Il metodo ritorna un array di NSString.

Esempio

picture-29Output

picture-28

– (BOOL)isEqualToString:(NSString *)aString

picture-41

Output

picture-2

Ci sono molti altri metodi utili ed ovviamente non posso fare un esempio per ognuno di questi. Quello che vi consiglio e` di analizzare attentamente l’ interfaccia di NSString e di fare delle prove.

NSTimer

I timer sono degli oggetti che permettono di eseguire dei metodi ad un dato momento, a ripetizione e soprattutto tramite i timer e` possibile eseguire due o piu` processi in parallelo. Vediamo come.

Prendiamo il nostro progetto Automobili. Creiamo un nuovo oggetto, subclass di NSObject: TestDeiTimer.

picture-110

I due metodi che utilizzeremo direttamente saranno : avviaTimers e stopTimers.

picture-21

Vediamo ora di capire l’ implementazione del nostro oggetto. Il metodo che andremo a chiamare e` “avviaTimers”.

Quando questo viene chiamato vengono avviati 3 timer distinti.

timerStringa1 e` il timer che esegue ogni 1.9 secondi il metodo printStringa1. Il metodo printStringa1 stampa a schermo “stringa 1”.

timerStringa2 e` il timer che esegue ogni 2.0 secondi il metodo printStringa2. Il metodo printStringa2 stampa a schermo “stringa 2”.

spegnimentoTimers e` il timer che esegue dopo 10 secondi il metodo stopTimers. Il metodo stopTimers blocca i timer timerStringa1 e timerStringa2.

[NSTimer

scheduledTimerWithTimeInterval:secs –> Ogni  secs secondi viene avviato il metodo.

target:targ –> targ e` l’ oggetto su cui si cerca il metodo da avviare (in questo caso self, perche` il metodo e` nello stesso oggetto).

selector:@selector(metodo🙂  —> metodo:(NSTImer*)timer –> e` il timer che viene avviato ogni secs secondi all’ interno dell’ oggetto targ.

userInfo:(NSObject*)oggetto —> oggetto da passare al metodo.

repeats:(BOOL)repeat —> YES se si vuole che il metodo venga eseguito dopo secs secondi e ripetuto ogni secs secondi. NO se si vuole che venga solo eseguito e non ripetuto.

[timerStringa1 invalidate]; ferma il timer.

L’ effetto che si avra` e` che ogni 1.9 secondi comparira` la scritta “stringa1” e subito dopo (dopo 0.1 secondi) comparira` “stringa 2”. Dopo 10 secondi i timer verranno disattivati e questo alternarsi di “stringa1”  e “stringa2” si fermera`.

Ora per provare il nostro oggetto inizializziamo l’ oggetto TestDeiTimer e lanciamo il metodo avviaTimers

picture-3

Il fatto di posizionare l’ avvio dei timer nel metodo “applicationDidFinishLaunching” fa in modo che i timers vengano avviati subito all’ avvio dell’ applicazione in modo che possiate subito vedere il risultato a console.

picture-42

Codice del progetto Automobili + TestDeiTimer : Automobili_TestDeiTimer.zip

Trovate tutte le lezioni del corso qui.

NovitàAcquista il nuovo iPhone 16 su Amazon
Applicazioni Cydia