2014-07-18 6 views
10

को हटाया नहीं गया है, मैंने Apple docs से AVPlayerDemo नमूना का उपयोग किया और UITableViewController से चुने गए वीडियो चलाने के लिए इसके ऊपर अपना स्वयं का यूआई लिखा। अब, समस्या यह है कि यहां कहीं मेमोरी रिसाव है जिसे मैं नहीं ढूंढ सकता। समस्या यह है कि AVPlayer ऑब्जेक्ट को हटाया नहीं जा रहा है, मैंने अनुमान लगाया है क्योंकि हर बार एक प्रेस बैक बटन और खेलने के लिए एक नया वीडियो चुनते हैं, ऐप द्वारा खपत कुल मेमोरी में एक बड़ी छलांग है जो यहां दिखाया गया है:आईओएस में मेमोरी लीक, एवीप्लेयर को कभी भी

The first time the video is player, the memory usage is 36.6MB

पहली बार वीडियो प्लेयर है, स्मृति उपयोग 36.6MB, दूसरी बार के लिए अब:

Here it has jumped to 58.2MB

यहाँ यह 58.2MB पर पहुंच गई है और प्रत्येक बढ़ाने पर रहता है समय मैं वापस जाता हूं और फिर वीडियो चलाता हूं या एक अलग वीडियो चलाता हूं।

enter image description here

मैं लीक से उपकरण उपयोग करने की कोशिश की है, लेकिन अभी तक नहीं किया है क्या गलत इसके साथ यह पता लगाने में सफल रहे।

संपूर्ण नियंत्रक फ़ाइल code है।

// संपादित

-(void) viewWillDisappear:(BOOL)animated{ 
    [super viewWillDisappear:animated]; 

    if(_player.rate == 1.0){ 
     [_player pause]; 
    } 

    [idleTimer invalidate]; 

    if(mTimeObserver){ 
     [_player removeTimeObserver:mTimeObserver]; 
     mTimeObserver = nil; 
    } 
    [_playerItem removeObserver:self forKeyPath:kStatusKeyT]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self             name:AVPlayerItemDidPlayToEndTimeNotification object:_playerItem]; 


    _player = nil; 
    _playerItem = nil; 
    idleTimer = nil; 
    _tapGestureRecognizer = nil; 
} 

-(void) dealloc 
{ 
    NSLog(@"DEALLOCING"); 
} 
+1

क्षमा करें, लेकिन कोई भी आपकी पूरी फ़ाइल के माध्यम से जाने के लिए जा रहा है ... आपको कुछ और डिबग करके इसे कम करने की आवश्यकता है (उदाहरण के लिए कुछ सुविधाओं को अक्षम करें और फिर से प्रयास करें या यह निर्धारित करने के लिए उपकरणों में आवंटन दृश्य का उपयोग करें कि यह कहां हो रहा है बनाए रखा, आदि) – borrrden

+0

मुझे पता है, मैंने अभी पूरी चीज को जोड़ा है ताकि मैं कुछ भी छोड़ न सकूं जो लीक पैदा कर सकता है .. मैं सिर्फ प्रासंगिक कोड कॉपी करूंगा और इसे यहां पेस्ट करूँगा। –

+0

@ फ़ारज़हसन क्या आपने ऐप्पल को टिकट की रिपोर्ट करने की कोशिश की है? – CAMOBAP

उत्तर

1

समस्या idleTimer साथ था। जब idleTimer पर अमान्य विधि को कॉल किया जाता है, तो यह टाइमर को सिंक्रनाइज़ रूप से अमान्य नहीं करता है, इसके बजाय, यह अमान्य और इसे जारी करने से पहले अगले टिक (निश्चित नहीं है, लेकिन कुछ समय तक प्रतीक्षा करता है) के लिए प्रतीक्षा करता है।

इस बीच, idleTimer संदर्भ शून्य पर सेट किया जा रहा है। टाइमर के अगले टिक पर, संदर्भ गुम हो जाता है और स्मृति कभी जारी नहीं होती है, और संदर्भ व्यू कंट्रोलर तक सभी तरह से प्रचारित होते हैं और इसकी कोई भी वस्तु जारी नहीं होती है।

संबंधित मुद्दे