-(CGImageRef)resizeImage:(CGImageRef *)anImage wIDth:(CGfloat)wIDth height:(CGfloat)height{ CGImageRef imageRef = *anImage; CGImageAlphaInfo AlphaInfo = CGImageGetAlphaInfo(imageRef); if (AlphaInfo == kCGImageAlphaNone) AlphaInfo = kCGImageAlphaNoneskipLast; CGContextRef bitmap = CGBitmapContextCreate(NulL,wIDth,height,CGImageGetBitsPerComponent(imageRef),4 * wIDth,CGImageGetcolorSpace(imageRef),AlphaInfo); CGContextDrawImage(bitmap,CGRectMake(0,height),imageRef); CGImageRef ref = CGBitmapContextCreateImage(bitmap); CGContextRelease(bitmap); CGImageRelease(ref); //issue here return ref;}解决方法 Cocoa内存管理命名策略声明,您拥有一个对象,该对象是从名称以alloc,copy或new开头的方法创建的.
Clang静态分析仪也遵守此规则.
请注意,Core Foundation的约定略有不同.详细信息可在Apple’s Advanced Memory Management Programming Guide找到.
我修改了上面的方法以符合命名约定.我在传入anImage时也删除了星号,因为CGImageRef已经是一个指针. (或者这是故意的吗?).
请注意,您拥有返回的CGImage,并且以后必须CGImageRelease它.
-(CGImageRef)newResizedImageWithImage:(CGImageRef)anImage wIDth:(CGfloat)wIDth height:(CGfloat)height{ CGImageAlphaInfo AlphaInfo = CGImageGetAlphaInfo(anImage); if (AlphaInfo == kCGImageAlphaNone) { AlphaInfo = kCGImageAlphaNoneskipLast; } CGContextRef bitmap = CGBitmapContextCreate(NulL,CGImageGetBitsPerComponent(anImage),CGImageGetcolorSpace(anImage),AlphaInfo); CGContextDrawImage(bitmap,anImage); CGImageRef image = CGBitmapContextCreateImage(bitmap); CGContextRelease(bitmap); return image;}总结
以上是内存溢出为你收集整理的ios – 如果需要返回它,如何发布CGImageRef?全部内容,希望文章能够帮你解决ios – 如果需要返回它,如何发布CGImageRef?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)