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 L'atomo divisibile: podcast gratuito di divulgazione scientifica. X come Macintosh, la nuova serie Nel numero di ottobre: No, tu no; Ancora Fusion; Podcast anch'io. |
|
|
|
|
28 Mar 2008, 18:46
Messaggio
#3
|
|
|
Benissimo, grazie della spiegazione.
Davide -------------------- |
|
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
3 | MacIavelli | 98 | 18 September 2008 - 22:17 Ultimo messaggio di: MacIavelli |
|||
![]() |
61 | Rodolfo Stigliano | 2.597 | 13 September 2008 - 20:13 Ultimo messaggio di: simulacron |
|||
![]() |
6 | [Daitarn] | 131 | 10 September 2008 - 21:50 Ultimo messaggio di: sirguich_ |
|||
![]() |
10 | borros | 311 | 17 August 2008 - 07:41 Ultimo messaggio di: alcina |
|||
![]() |
21 | 3rr3 | 299 | 13 August 2008 - 12:46 Ultimo messaggio di: Lullaby71 |
|||
![]() |
10 | MACBUK | 218 | 15 June 2008 - 03:56 Ultimo messaggio di: pieffe60 |
|||
![]() |
0 | TevacPhoto | 50 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 38 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 35 | 4 June 2008 - 22:57 Ultimo messaggio di: TevacPhoto |
|||
![]() |
3 | drscholls | 186 | 22 May 2008 - 16:50 Ultimo messaggio di: drscholls |
|||
![]() |
3 | arbushell | 166 | 16 May 2008 - 00:57 Ultimo messaggio di: poweruser |
|||
![]() |
0 | mauroga | 857 | 3 April 2008 - 16:22 Ultimo messaggio di: mauroga |
|||
|
Versione Lo-Fi | Oggi è il: 13 October 2008 - 15:04 |
| IP.Board Skin Developed By Creative Networks | ||