Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C-使用CGDataProviderCopyData的内存泄漏_Objective C_Nsimage_Cgimage_Cgimageref - Fatal编程技术网

Objective c 目标C-使用CGDataProviderCopyData的内存泄漏

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

我是ObjC上的新开发人员,正在尝试制作填充颜色应用程序。当我触摸图像时,颜色会发生变化,但我通过此功能获得了merory泄漏需要您的帮助:

-(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 );