CIFilter initialiser에서 메모리 누수가 발생했습니다. 재현 할 단계는 다음과 같습니다.
- 원시 샘플 버퍼를 캡처하려면 AVFoundation을 사용하십시오.
- 전화 CMSampleBufferGetImageBuffer()는 CVPixelBuffer를 얻을 수 있습니다 :
- 는 CIFilter 만들기 : CIFilter가 버려진 것을
가
- 알 수 있습니다.
- 위의 모든 단계를 완료 한 후에 1 단계로 돌아가서 100 번 반복하십시오.
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let metadata = CMCopyDictionaryOfAttachments(nil, sampleBuffer, kCMAttachmentMode_ShouldPropagate)!
_ = CIFilter(cvPixelBuffer: pixelBuffer, properties: metadata)
예상 결과 :
신속 객체를 생성 및 메모리 누수가되지 않습니다 멀리 던지는
여기에 코드입니다.
실제 결과 : 아이폰 OS 응용 프로그램을 죽이기까지
샘플 버퍼 (대신 RAW의)을 BGRA 캡처 및 CIImage로 변환하여 메모리를 누설하지 않는
iPhone 7 Plus 및 iPhone X의 iOS 11에 있습니다.
앱에서 메모리 누수를 찾으려고 했습니까? –
아마도 여러분은 지역 변수로서 메모리 소비 유형을 도입했을 것입니다. 아마도 이론적으로 스택 공간을 고갈시킬 수있는 커다란 C- 배열 및 구조체 일 가능성이 있습니다. 아마도 힙에 무언가를 넣는 빡빡한 루프 일 가능성이 큽니다. 문제의 원인이되는 변경 사항을 좁힐 수있는 개정 내역이 없습니까? –
@ Kamil.S 나는 어떤 일을 저지르고, 힘내려는 것이 아니라는 것을 알고 있습니다. 그것은 깊은 재귀가 없으므로 스택 공간에 관한 것이 아닙니다. 근면하게 새로운 코드를 주석 처리하고 라인별로 주석을 달아서 문제가 https://developer.apple.com/documentation/coreimage/cifilter/2138288-init에 있음을 발견했습니다. CIFilter를 작성하여 버리면, 메모리가 누출되어서는 안됩니다. 하지만 Xcode 나 Instruments는 우리에게 더 나은 방법, 즉 모든 클래스를 사용 된 메모리 (해당 클래스의 모든 인스턴스에 의해 점증 적으로)별로 정렬하는 방법을 제공합니까? –