다음 코드는 내가 원하는 방식으로 작동하지만, 내가 호출 할 때마다 Instruments는 하나의 CGImage 메모리 누수가 있다고 알려줍니다. 나는 언제 무엇을 공개해야하는지 이해하는 데 어려움을 겪고있다. 다음은 내 파일의 @interface 섹션에서 가져온 것입니다.CGImage 메모리 누수
CGImageRef depthImageRef;
char *depthPixels;
NSData *depthData;
다음 코드에서는 기본적으로 depthPixels을 변경 한 다음 결과를 새로운 depthImageRef에 저장합니다.
size_t width = CGImageGetWidth(depthImageRef);
size_t height = CGImageGetHeight(depthImageRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(depthImageRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(depthImageRef);
size_t bytesPerRow = CGImageGetBytesPerRow(depthImageRef);
for (int row = 0; row < height; row += 1) {
for (int bitPlace = 0; bitPlace < bytesPerRow; bitPlace += 4) {
CGPoint pointForHeight = CGPointMake((bitPlace/4) - place.x, row - place.y);
int distanceFromLocation = sqrt(pow(place.x - pointForHeight.x, 2) + pow(place.y - pointForHeight.y, 2));
int newHeight = blopHeight - (5 - sizeSlider.value)*distanceFromLocation;
NSInteger baseBitPlace = row*bytesPerRow + bitPlace;
CGFloat currentHeight = depthPixels[baseBitPlace];
if (newHeight > currentHeight) {
depthPixels[baseBitPlace] = newHeight;
}
}
}
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(depthImageRef);
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, depthPixels, [depthData length], NULL);
depthImageRef = CGImageCreate (
width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow,
colorspace,
bitmapInfo,
provider,
NULL,
false,
kCGRenderingIntentDefault
);
CGColorSpaceRelease(colorspace);
CFRelease(provider);
CGDataProviderRelease(provider);
은 내가 depthImageRef을 만드는 유지하지만, 그것을 해제하지 않기 때문에 누수가 생성 생각합니다. CGImageRelease (depthImageRef)를 여러 위치에 배치하고 depthImageRef를 nil로 설정해 보았습니다. 일반적으로 이렇게하면 충돌이 발생합니다. 감사!
항상 자신이 만든 것을 릴리스해야합니다. 따라서'depthImageRef'를 해제하는 것이 맞습니다. 그것을 release 한 후에'depthImageRef'를 참조하고 있는지 확인하십시오. 또한, 이것은 무엇입니까? ----'> CFRelease (provider); > CGDataProviderRelease (공급자), '왜 두 번 공급자를 출시합니까? – croyneaus4u