Objective c 目标C-使用CGDataProviderCopyData的内存泄漏
我是ObjC上的新开发人员,正在尝试制作填充颜色应用程序。当我触摸图像时,颜色会发生变化,但我通过此功能获得了merory泄漏需要您的帮助:Objective c 目标C-使用CGDataProviderCopyData的内存泄漏,objective-c,nsimage,cgimage,cgimageref,Objective C,Nsimage,Cgimage,Cgimageref,我是ObjC上的新开发人员,正在尝试制作填充颜色应用程序。当我触摸图像时,颜色会发生变化,但我通过此功能获得了merory泄漏需要您的帮助: -(void) updateImageWithColorSelected:(int) pos{ CGImageRef imageRef = self.basicImage.CGImage; NSData *data = CGDataProviderCopyData(CGImagerGetDataProvider(imageRef));//lea
-(void) updateImageWithColorSelected:(int) pos{
CGImageRef imageRef = self.basicImage.CGImage;
NSData *data = CGDataProviderCopyData(CGImagerGetDataProvider(imageRef));//leak here
Byte *pixels = (Byte *)[data bytes];
//change color...
for(int i = 0; i< IMG_SIZE; i++){
pixels[j] = 255;
}
CGDataProvider provider = CGDataProviderCreateWithData( NULL, pixels, [data length], NULL];
CGImageRef newImageRef = CGImageCreate(w,h....);
self.basicImage = [UIImage imageWithCGImage:newImageRef];
//release newImageRef
CGImagerRelease(newImageRef);
// set basic image to img
[self.img setImage:self.basicImage];
data = nil;
[data release];
}
-(void)updateImage WithColorSelected:(int)pos{
CGImageRef imageRef=self.basicImage.CGImage;
NSData*data=CGDataProviderCopyData(CgImageTargetDataProvider(imageRef));//此处泄漏
字节*像素=(字节*)[数据字节];
//改变颜色。。。
对于(int i=0;i
我尝试删除除NSData*data=CGDataProviderCopyData之外的所有代码,但应用程序仍然泄漏。
你们知道如何发布“数据”吗
提前谢谢大家,
}
您正在向零指针发送释放
[data release];
data = nil;
}
这会更好
编辑:CGDataProviderCreateWithData的问题
释放数据时,传递给CGDataProviderCreateWithData
的数据指针无效。这是预期的。正确使用此函数需要为数据分配缓冲区,并在释放提供程序时提供回调以释放数据
最好的解决方案是使用<代码> cgDATaPosivRealCudio.CFDATAs/COD>,利用基础和Coloundoundation对象之间的免费桥接。
使用: 您正在向零指针发送释放 [data release];
data = nil;
}
这会更好
编辑:CGDataProviderCreateWithData的问题
释放数据时,传递给CGDataProviderCreateWithData
的数据指针无效。这是预期的。正确使用此函数需要为数据分配缓冲区,并在释放提供程序时提供回调以释放数据
最好的解决方案是使用<代码> cgDATaPosivRealCudio.CFDATAs/COD>,利用基础和Coloundoundation对象之间的免费桥接。
使用:请注意,目前通过调用
CGDataProviderCreateWithData()
或CGDataProviderCreateWithCFData()
创建的数据提供程序也在泄漏,应该通过调用CGDataProviderRelease()
来释放该数据提供程序(与原始泄漏的数据相比,该泄漏无疑是很小的)请注意,目前通过调用CGDataProviderCreateWithData()
或CGDataProviderCreateWithCFData()
创建的数据提供程序也在泄漏,应该通过调用CGDataProviderRelease()
来释放(与最初泄漏的数据相比,这种泄漏无疑是很小的)您好fabrice truillot de chambri,谢谢,您的建议是有帮助的,是的,我的错,应用程序在更改后不再泄漏,但图像现在无法显示。发布数据似乎也意味着发布imageRef。有人对此有过经验吗?感谢您将我的答案与您的其他问题的解决方案结合起来。:)亲爱的朋友,非常感谢你告诉我。该解决方案彻底修复了漏洞。你好,fabrice truillot de chambri,谢谢,你的建议是有帮助的,是我的错,更改后应用程序不再泄漏,但图像现在无法显示。似乎发布数据也意味着发布imageRef。有人在这件事上有经验吗?谢谢你把我的回答和你的其他问题的解决方法结合起来亲爱的朋友,非常感谢你指点我。这个解决方案彻底解决了这个漏洞。
CGDataProvider provider = CGDataProviderCreateWithCFData( (CFDataRef) data );