1
我正在從服務器下載幾個小尺寸歌曲並將其存儲(NSData)到NSUserDefaults中,以便我可以在需要時使用它緩存並直接在設備上播放,而不是下載並從服務器再次播放。 問題是,如果我在NSUserDefaults中存儲少量幾個較小尺寸的歌曲作爲數據格式,則會減少大量設備內存並引發內存警告或崩潰等。iPhone:在NSUserDefaults和內存問題上存儲音頻數據
難道你有人指導我如何解決它?如何將歌曲數據持久存儲在設備上以實現緩存目的,並且同時以較少的內存使用量進行存儲?
更新:根據建議,我試圖將歌曲數據添加到字典作爲文件,並試圖檢索它如下。但是,仍然面臨着同樣的問題,大約30mb的數據檢索後的內存警告。有人可以幫我解決這個問題嗎?我需要存儲大約40 mb的歌曲數據並存儲它。
NSURL *songurl = [NSURL URLWithString:downloadSOngUrl];
NSMutableData *songdata = [NSMutableData dataWithContentsOfURL:songurl];
NSString *fileName = [downloadSOngUrl lastPathComponent];
NSLog(@"fileName: %@",fileName);
[appDelegate writeSongIntoDocsDirectory :songdata :fileName];
-(void) writeSongIntoDocsDirectory :(NSData *) inSongData :(NSString *) songNamePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"songNamePath: %@", songNamePath);
songNamePath = [songNamePath stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
NSLog(@"songNamePath: %@", songNamePath);
if ([inSongData writeToFile:[documentsDirectory stringByAppendingPathComponent:songNamePath] atomically:YES])
{
// Success !
NSLog(@"Successfully saved the song into documents directory");
}
else
{
// Error !
NSLog(@"Error when Successfully saving song into documents directory");
}
}
-(NSData *) readSongDataFromDocsDirectory :(NSString *) filePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSData *readData = [NSData dataWithContentsOfFile:[documentsDirectory stringByAppendingPathComponent:filePath]];
return readData;
}
在此先感謝!
您好,感謝您的答覆。你如何說存儲音頻文件?我的意思是,什麼格式?你想讓我把每首歌的NSData存儲在文檔目錄中嗎?因爲我的歌曲網址來自服務器,我使用NSData * data = [NSData dataWithContentsOfURL:url];現在獲取歌曲二進制文件。 – Getsy 2012-04-15 11:09:12
NSData有一個名爲writeToFile的方法:atomically:它完全符合你想要做的。查看NSData的文檔以瞭解如何使用它。 – 2012-04-15 11:17:30
嗨,我添加並存儲到文件目錄中大約70 mb的歌曲數據,但是當我嘗試使用NSUserDefaults時,問題也是如此。 – Getsy 2012-04-15 16:24:52