Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
28 Mar 2008, 16:48
Messaggio
#1
|
|
|
Salve a tutti.
ho una confessione imbarazzante: so cosa sono i puntatori, ma non li ho mai digeriti del tutto Visto che Marco è in giro approfitto della sue esperienza per porvi un quesito a carattere abbastanza teorico. In questo caso non ho problemi o bug, ma voglio essere certo di capire cosa sto facendo. Sto creando un'applicazione a carattere musicale, che contiene un parser testuale; no uso la GC. Il parser, come nelle migliori famiglie, passa una stringa carattere per carattere e immagazzina dati secondo la necessità. Sto cercando di essere più "MVC" possibile: il parser registra i dati su un oggetto "brano", che contiene oggetti "musicblock" che contengono oggetti "Nota", ecc. Il mio parser di tanto in tanto chiude un musicblock per aprirne un altro; per questo il parser dispone di una variabile di istanza chiamata "openMusicBlock", che uso proprio per puntare al music block aperto. Questo è il frammento che chiude un musicblock, lo inserisce nel brano ("tune") e ne apre un altro; openMusicBlock è un'istanza di DBNMusicBlock CODICE [openMusicBlock setEndBar:bar]; [openMusicBlock setRepetitions:repetitions]; [tune appendObject:openMusicBlock]; [openMusicBlock release]; DBNMusicBlock *newMusicBlock = [[DBNMusicBlock alloc] init]; [newMusicBlock setRepetitions:[NSNumber numberWithInt:1]]; [newMusicBlock setKey:[tune key]]; [newMusicBlock setMode:[tune mode]]; openMusicBlock = newMusicBlock; Cosa mi dite, tutto regolare? Non ho rilasciato un'istanza di troppo, oppure sì? La routine funziona bene, ma vi chiedo conferme perché sono un po' confuso... Commenate, commentate, Davide -------------------- |
|
|
|
|
|
|
|
28 Mar 2008, 18:32
Messaggio
#2
|
|
|
Direi che va tutto bene, non hai rilasciato un'istanza di troppo perché il retainCount di openMusicBlock è stato incrementato quando hai aggiunto l'oggetto a cui punta a tune; quando chiami
CODE [openMusicBlock release] l'oggetto non viene distrutto, perché è ancora "trattenuto" da tune, ma "liberi" la variabile openMusicBlock. In questo modo, non hai nessun bisogno di dichiarare newMusicBlock; fai semplicemente: CODE [openMusicBlock setEndBar:bar]; [openMusicBlock setRepetitions:repetitions]; [tune appendObject:openMusicBlock]; [openMusicBlock release]; openMusicBlock = [[DBNMusicBlock alloc] init]; [openMusicBlock setRepetitions:[NSNumber numberWithInt:1]]; [openMusicBlock setKey:[tune key]]; [openMusicBlock setMode:[tune mode]]; Questo ti permette di mettere tutto dentro un ciclo, ad esempio, "riciclando" sempre la stessa variabile openMusicBlock, che potrebbe persino essere locale (persino all'interno dello scope del ciclo stesso), dal momento che creazione (alloc) e distruzione (release) sono bilanciati. -------------------- Marco Coïsson
http://homepage.mac.com/marco_coisson X come Macintosh, la nuova serie Nel numero di giugno-luglio: Passo incerto; Un Mac mancato: hardware; Un Mac mancato: software. |
|
|
|
|
28 Mar 2008, 18:46
Messaggio
#3
|
|
|
Benissimo, grazie della spiegazione.
Davide -------------------- |
|
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
10 | MACBUK | 158 | 15 June 2008 - 03:56 Ultimo messaggio di: pieffe60 |
|||
![]() |
0 | TevacPhoto | 18 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 13 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 14 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
3 | drscholls | 116 | 22 May 2008 - 16:50 Ultimo messaggio di: drscholls |
|||
![]() |
3 | arbushell | 124 | 16 May 2008 - 00:57 Ultimo messaggio di: poweruser |
|||
![]() |
0 | mauroga | 725 | 3 April 2008 - 16:22 Ultimo messaggio di: mauroga |
|||
![]() |
2 | robizucc | 241 | 7 March 2008 - 17:06 Ultimo messaggio di: robizucc |
|||
![]() |
3 | ryosaeb4 | 191 | 8 November 2007 - 12:38 Ultimo messaggio di: ryosaeb4 |
|||
![]() |
2 | verbal_kint | 370 | 12 October 2007 - 08:31 Ultimo messaggio di: ceuce |
|||
![]() |
4 | Tevac | 716 | 4 August 2007 - 21:06 Ultimo messaggio di: markko |
|||
![]() |
11 | gioz73 | 1.167 | 23 July 2007 - 10:20 Ultimo messaggio di: stefano D |
|||
|
Versione Lo-Fi | Oggi è il: 6 July 2008 - 01:47 |
| IP.Board Skin Developed By Creative Networks | ||