Tôi bị kẹt trên một số vấn đề rò rỉ bộ nhớ lạ liên quan đến AVAudioPlayer và tôi cần trợ giúp sau khi thử mọi thứ mà bạn nghĩ đến.Rò rỉ bộ nhớ AVAudioPlayer
Đây là mô tả ngắn về vấn đề - mã xuất hiện ngay sau đó. Tôi khởi tạo trình phát của mình và bắt đầu phát bản âm thanh trong vòng lặp vô tận (và vòng lặp vô tận hoặc phát một lần không làm thay đổi vấn đề). Vài giây sau khi nhạc bắt đầu, tôi chuyển sang một bản nhạc khác, do đó tôi tạo một trình phát mới, khởi chạy nó, phát hành bản nhạc cũ (đang phát) và sau đó cài đặt bản nhạc mới và phát.
Vào thời điểm đó (ngay sau khi tôi gọi Trình phát mới - [Trình phát], tôi bị rò rỉ bộ nhớ (3,5Kb).
tôi thử như sau:
Dừng các cầu thủ cũ và sau đó phát hành nó - không có tác dụng
phát hành Player ngay sau khi hướng dẫn chơi - không chơi bắt đầu
Phát hành hai lần trình phát cũ - lỗi
Rò rỉ bộ nhớ KHÔNG xảy ra khi tôi tạo và phát Người chơi đầu tiên!
Ngoài ra, trong các tài liệu tham khảo nó nói rằng 'chơi' là async và do đó có thể làm tăng số lượng ref bằng 1, nhưng trong trường hợp này, tại sao không [chơi dừng lại] giúp?
Cảm ơn,
Dưới đây là một số bộ phận của mã về cách tôi sử dụng nó:
- (void) loadAndActivateAudioFunction {
NSBundle *mainBundle = [NSBundle mainBundle];
NSError *error;
NSURL *audioURL = [NSURL fileURLWithPath:[mainBundle pathForResource: Name ofType: Type]];
AVAudioPlayer *player = [(AVAudioPlayer*) [AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
if (!player) {
DebugLog(@"Audio Load Error: no Player: %@", [error localizedDescription]);
DuringAudioPrep = false;
return;
}
[self lock];
[self setAudioPlayer: player];
[self ActivateAudioFunction];
[self unlock];
}
- (void) setAudioPlayer : (AVAudioPlayer *) player {
if (Player)
{
if ([Player isPlaying] || Repeat) // The indication was off???
[Player stop];
[Player release];
}
Player = player;
}
- (void) ActivateAudioFunction {
[Player setVolume: Volume];
[Player setNumberOfLoops: Repeat];
[Player play];
DuringAudioPrep = false;
}
Cảm ơn câu trả lời. Có - Tôi đã xác minh rằng đó là AVAudioPlayer with Instruments. Theo phương pháp - tôi sử dụng phương pháp này vì tôi thực sự lưu các bản nhạc khác nhau và sử dụng lại chúng bằng cách khớp tên và nếu chúng không phát (thay vì tải xuống cùng một bản nhiều lần). Vì tôi biết rằng tôi nhận được Người chơi từ người gọi sau khi thực hiện 'Alloc' trên nó, tôi biết rằng nó đã được giữ lại (trừ khi tôi đã sai?) – Adi