2012-03-10 28 views
14

HD fotoğrafları yöneten bir uygulama üzerinde çalışıyorum. Bir AVCaptureSession ile fotoğraf çekiyorum, durdurup, o fotoğrafa efektler uygularım.AVCaptureSession Hafıza uyarı ve çökmesine sebep yok

Beni CRAZY yapan şey, her şeyin yolunda gitmesi, enstrümanların bana doğru ve zamanında kullandığım tüm belleği bıraktığımı söylemesi. Gerçekten yüksek evet, bazen 100mb'ye gider. Ama hızla iner.

Daha sonra Yakalama Seansımı yeniden başlatırım ve bir bellek uyarısı aldım. Bunun için kesinlikle bir neden yok; _; Serbest bırakılırsa kullandığım tüm bellek ... Sonra bir dahaki sefere yakalama oturumunu yeniden başlatacağım uygulama çöküyor. Mesaj yok, kayıt yok, hiç bir şey yok.

Bunu nasıl çözeceğimi bilmiyorum, nereye bakacağımı bilmiyorum ... Birisi bana biraz yardımcı olabilirse çok memnun olurum!

Şimdiden teşekkürler!

+0

Bazı kodlar yardımcı olabilir. –

cevap

22

Aynı hayal kırıklıklarını yaşadım. AV Foundation kullanarak bir kamera sunduğum bir projede ARC kullanıyordum. Görünüm denetleyicisini birkaç kez sunup açtıktan sonra, uygulamam düşük bellek uyarısı alacak ve ardından çökecektir. Aletler de çok yardımcı olmadı. Çözümü çözerek keşfettim:

Kamera sınıfınızda ARC kullanıyor olsanız bile, dealloc yöntemini uygulayabilirsiniz (sadece super dealloc üzerinde arama).

- (void)dealloc { 
    AVCaptureInput* input = [session.inputs objectAtIndex:0]; 
    [session removeInput:input]; 
    AVCaptureVideoDataOutput* output = [session.outputs objectAtIndex:0]; 
    [session removeOutput:output]; 
    [session stopRunning]; 
} 

Bu AVCaptureSession durdurma ve hayatta hala giriş veya çıkışlar sağlayarak ilgilenir. Ben bu çizgiyi bulduk aynı sorunla karşılaşırsanız sahip

+2

@bryndodayle hayatımı kurtardın, çok teşekkür ederim! –

+0

Neden sadece ilk giriş ve çıkış kaldırıldı? neden tüm girdileri ve çıktıları kaldırmıyorsunuz? –

13

ayırmayı kaldırma ve hiçbir hafıza sorunu varken

[self.vImagePreview.layer addSublayer:captureVideoPreviewLayer]; 

Sadece süper katmandan previewlayer kaldırmak ana sorunu olduğunu. Ayrıştırma işlevim, başka bir görüntüyü açmadan ve sürüklemeden önce bu işlevi çağırdı. Sorunumu çözdü.

İlgili konular