Điều đầu tiên tôi đã làm là đăng nhập vào các phương thức dealloc của tất cả các tệp AVCam. Tôi nhanh chóng phát hiện ra rằng AVCamCaptureManager và AVCamRecorder đã không được deallocated khi AVCamViewController được. Tôi đã kiểm tra các cuộc gọi giữ lại và phát hành và chúng xuất hiện để cân bằng vì vậy tôi đặt một điểm ngắt trên [captureManager release] và phát hiện ra rằng nó có một điểm giữ lại 2 SAU bản phát hành (và vì thế thỏa thuận AVCamCaptureManager không được gọi).
Tiếp theo, tôi đã thực hiện quy trình tạo cho trình quản lý chụp và phát hiện ra rằng nó có số lần giữ lại là 3 ngay sau khi phương thức init được gọi.
Đẩy mạnh thông qua các phương pháp init và kiểm tra giữ lại đếm trên mỗi dòng tôi phát hiện ra hai dòng sau đây đã được cả hai incrementing giữ count:
[self setDeviceConnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification object:nil queue:nil usingBlock:deviceConnectedBlock]];
[self setDeviceDisconnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification object:nil queue:nil usingBlock:deviceDisconnectedBlock]];
Nhìn qua tôi thấy rằng các đối tác removeObserver là INSIDE phương pháp dealloc của AVCamCaptureManager (mà đã không được gọi) và do đó giữ lại đếm không bao giờ giảm xuống còn 0.
để khắc phục nó tôi đã tạo ra một removeObservers công phương pháp mới:
-(void)removeObservers {
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
}
và lấy cùng các dòng OUT của phương thức dealcam của AVCamCaptureManager.
Gọi [captureManager removeObservers]; và THEN gọi [captureManager release]; trong phương pháp dealloc AVCamViewController giảm thành công số lượng lưu giữ xuống 0.
Thử nghiệm với Trình giám sát hoạt động hiện có quy trình mediaserverd chỉ rung ở mức 5-17Mb và các điểm dừng bị dừng!
Hy vọng điều này sẽ giúp bất kỳ ai khác gặp sự cố này!
Nguồn
2011-10-25 01:45:38
Cảm ơn! Vui lòng chia câu trả lời thành câu trả lời, sau đó bạn có thể chấp nhận: [Nghi thức trả lời câu hỏi của riêng bạn] (http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question) và [Đăng và trả lời các câu hỏi mà bạn đã tìm thấy câu trả lời] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-have-already-found-the-answer-to) – sehe
Đã cố gắng nhưng vì tôi không phải là người dùng cao cấp nên nó sẽ không cho phép tôi trả lời câu hỏi của mình trong vòng 24 giờ ... không có thời gian để làm phiền nó (hoặc quên những gì tôi muốn ghi lại) ... Tôi sẽ xem nếu tôi có thể làm điều đó ngay bây giờ. –