UnknownSoldier Inviato 3 Luglio 2011 Segnala Condividi Inviato 3 Luglio 2011 Salve a tutti. Mandando in debug la mia applicazione iOS utilizzando lo strumento Allocations, noto che l'applicazione, col passare del tempo, aumenta la memoria utilizzata. Proseguendo con la mia indagine, scopro che ci sono oggetti di tipo CFString e CFUrl che aumentano ogni qual volta viene eseguito un suono. Provando a disabilitare l'esecuzione dei suoni, gli oggetti CFString e CFUrl rimangono stabili. Quindi il problema è nel codice che utilizzo per l'audio, cioè questo: + (void) playSound:(NSString *)soundName { if (canPlay) { NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], soundName]; NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; SystemSoundID sound; CFURLRef filePathURL = (CFURLRef)filePath; AudioServicesCreateSystemSoundID(filePathURL, &sound); AudioServicesPlaySystemSound(sound); } } Ho provato ad aggiungere filePathURL = nil alla fine, ma non cambia nulla... e poi siccome non sono oggetti non posso utilizzare il metodo release. Quindi, come faccio a rilasciare correttamente gli oggetti CFString e CFUrl in questo codice? Grazie mille! Link al commento Condividi su altri siti Altre opzioni di condivisione...
fra.makaveli Inviato 3 Luglio 2011 Segnala Condividi Inviato 3 Luglio 2011 Non ci vedo nulla di sbagliato. Dovrei rileggere un attimo la guida per la memoria, ma quegli oggetti che ti rimangono sono path e filePath. Ma non sei te l'owner di quegli oggetti, quindi è giusto che non devi rilasciarli. Quello che non mi ricordo è se appartengono alla NSAutoreleasePool più vicina, oppure no. Comunque se vuoi fare una prova prova con questo codice: + (void) playSound:(NSString *)soundName { if (canPlay) { NSString *path = [[NSString alloc] initWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], soundName]; NSURL *filePath = [[NSURL alloc] initFileURLWithPath:path isDirectory:NO]; [path release]; SystemSoundID sound; CFURLRef filePathURL = (CFURLRef)filePath; AudioServicesCreateSystemSoundID(filePathURL, &sound); [filePath release]; AudioServicesPlaySystemSound(sound); } } Link al commento Condividi su altri siti Altre opzioni di condivisione...
bublen Inviato 3 Luglio 2011 Segnala Condividi Inviato 3 Luglio 2011 per rilasciare usa CFRelease (filePathURL); Hai un'idea per un'app ma non sai programmare? Contattami. Trovi gli indirizzi sul mio sito: http://www.2ciphonedevelopers.com Link al commento Condividi su altri siti Altre opzioni di condivisione...
fra.makaveli Inviato 4 Luglio 2011 Segnala Condividi Inviato 4 Luglio 2011 per rilasciare usa CFRelease (filePathURL); Scusa.. non vorrei dire una cavolata, ma non puoi fare un CFRelease, siccome non sei te l'owner dell'oggetto. Ha soltanto un reference all'URL, ma il retain count non è incrementato. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.