पहली चीज जो मैंने किया वह सभी एवीकैम फ़ाइलों के डेलोक तरीकों में लॉगिंग कर रहा था। मैंने जल्दी से पता चला कि AVCamCiewureManager और AVCamRecorder को AVCamViewController होने पर हटाया नहीं जा रहा था। मैंने बरकरार रखने और कॉल जारी करने की जांच की और वे संतुलन में दिखाई दिए, इसलिए मैंने [कैप्चर मैनेजर रिलीज] पर ब्रेकपॉइंट लगाया और पाया कि रिलीज के बाद 2 को बनाए रखा गया था (और इसलिए AVCamCaptureManager dealloc को नहीं कहा जा रहा था)।
अगला मैंने कैप्चर मैनेजर के लिए निर्माण प्रक्रिया के माध्यम से कदम उठाया और पाया कि इनिट विधि के तुरंत बाद इसे 3 की एक बार फिर से बनाए रखा गया था।
init विधि के माध्यम से कदम और जाँच हर लाइन पर गिनती बनाए रखने मैं निम्नांकित दो पंक्तियों दोनों गिनती बनाए रखने incrementing रहे थे की खोज:
[self setDeviceConnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasConnectedNotification object:nil queue:nil usingBlock:deviceConnectedBlock]];
[self setDeviceDisconnectedObserver=[notificationCenter addObserverForName:AVCaptureDeviceWasDisconnectedNotification object:nil queue:nil usingBlock:deviceDisconnectedBlock]];
देख रहे हैं के माध्यम से मैंने पाया कि removeObserver समकक्षों dealloc विधि अंदर थे
-(void)removeObservers {
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
[notificationCenter removeObserver:[self deviceConnectedObserver]];
}
: मैं एक नया सार्वजनिक removeObservers विधि बनाया AVCamCaptureManager (जो नहीं कहा जा रहा था) के और इतने बनाए रखने गिनती 0.
के लिए कभी नहीं गिरा इसे ठीक करने के
और AVCamCaptureManager dealloc विधि के बाहर एक ही लाइन लेना।
कॉलिंग [captureManager removeObservers]; और फिर कॉलिंग [कब्जा प्रबंधक रिलीज]; AVCamViewController dealloc विधि में 0
गतिविधि मॉनिटर के साथ परीक्षण करने के लिए सफलतापूर्वक गिनती की संख्या को केवल 5-17 एमबी पर घुमाया गया है और क्रैशिंग स्टॉप है!
आशा है कि इससे किसी और को यह समस्या होने में मदद मिलेगी!
स्रोत
2011-10-25 01:45:38
धन्यवाद के लिए फिक्स! कृपया उत्तर को एक उत्तर में विभाजित करें, जिसे आप स्वीकार कर सकते हैं: [अपने स्वयं के प्रश्न का उत्तर देने के लिए शिष्टाचार] (http://meta.stackexchange.com/questions/17845/etiquette-for-answering-your-own-question) और [उन प्रश्नों को पोस्ट करना और उत्तर देना जिन्हें आप पहले ही जवाब दे चुके हैं] (http://meta.stackexchange.com/questions/2706/posting-and-answering-questions-you-have-already-found-the-answer-to) – sehe
ने कोशिश की लेकिन क्योंकि मैं प्रीमियम उपयोगकर्ता नहीं हूं, यह मुझे 24 घंटे के भीतर अपने प्रश्न का उत्तर नहीं देगा ... इसके पास गड़बड़ करने का समय नहीं था (या जो मैं रिकॉर्ड करना चाहता था उसे भूल गया) ... मैं देखूंगा कि मैं इसे अभी कर सकता हूं या नहीं। –