일부 CGImageRef 객체에 대한 정적 분석기 경고가 표시됩니다. 경고는 "호출자가이 시점에서 소유하지 않은 개체의 참조 횟수가 잘못 감소했습니다." 그러나 나는 그것을 발신자가 소유하기를 원한다. 내 Obj-C 메소드에 삽입해야하는 특별한 문구가 있습니까? 내가 똑같은 것을 줄 짓기 위해 문자 그대로 줄을 만드는 C 함수를 만들면 경고가 사라집니다. 내가 그들을 분리하는 이유는 때로는 내 응용 프로그램이 CGImage (편집 용)를 사용하기 때문에 때로는 UIImage (UIImageView를 설정하기 위해)를 사용하기 때문입니다. 그것은 내가 바로 그것을 반환하기 전에 의미가의 CGImage를 해제하지 않습니다부정확 한 감소에 대한 분석기 경고
+ (UIImage *)imageFromCompressedData:(NSData *)compressedData withSize:(CGSize)size
{
CGImageRef cgImage = [SO2CompressionHandler cgImageFromCompressedData:compressedData withSize:size];
UIImage *returnImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return returnImage;
}
+ (CGImageRef)cgImageFromCompressedData:(NSData *)compressedData withSize:(CGSize)size
{
//...decompress data
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)decodedData);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef outImageRef = CGImageCreate(width, height, 8, 32, 4*width, colorSpace, kCGImageAlphaPremultipliedLast, provider, NULL, false, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
if(CGSizeEqualToSize(CGSizeZero, size) || CGSizeEqualToSize(CGSizeMake(width, height), size))
{
CGColorSpaceRelease(colorSpace);
return outImageRef; //Flagged as potential leak
}
//...or resize and return the in a similar way
}
:
여기에 (의 관련 필수 요소까지 제거) 관련 코드는? 그러면 그것은 단지 잘못된 기억 일 것입니다. 이것이 C- 함수를 사용해야한다는 힌트입니까? 또는 정적 분석기는 단순히 C- 기능을 검사하지 않습니다. cgImageFromCompressedData:withSize:
을 CGImageCreateWithCompressedData(NSData *compressedData, CGSize size)
으로 변경했으며 마법처럼 더 이상 경고하지 않았습니다. 방금 경고를 무시해야합니까, 아니면 어떤 장점이 있습니까? Obj-C 메소드 이름에 "new"또는 "alloc"이라는 단어를 추가해야합니까?
아 하, 매우 유익한. 고마워. 가능한 경우 8 분 안에 답변을 수락합니다. – borrrden
또한 내 편집 내용을 확인하십시오. 처음에는'NS_RETURNS_RETAINED'를 잘못 사용했습니다. –
어쨌든 첫 번째 방법을 사용하려고했지만 감사했습니다. :) – borrrden