【发布时间】:2013-10-15 13:30:19
【问题描述】:
在下面的函数中,我试图返回由NSData 创建的UIImage 指针
- 当我给出选项
freeWhenDone = YES时,从这里返回的UIImage是白色图像。 -
当我给选项
freeWhenDone = NO-
UIImage此处返回的表单将其显示为黑色图像。 - 当我通过
rgb_buffer(字符数组)而不是[rgbData bytes]时,function1 和function2 工作正常。一切都很好。
-
这与 ARC 有关吗?
Myfunction
{
char *pu1_out_buffer = malloc(length);
int width, height, stride;
char *rgb_buffer = malloc(BUFFER_LENGTH);
pu1_out_buffer = datafromfile(FILE_PATH) // initialized with some data , not important
/* rgb NSdata created from malloced rub buffer */
NSMutableData *rgbData = [NSMutableData dataWithBytesNoCopy:rgb_buffer
length:(u4_stride * u4_height * 3)
freeWhenDone:YES];
[self function1:pu1_out_buffer
rgb_buffer:(UWORD16 *)[rgbData bytes]
…]
free(pu1_out_buffer);
UIImage *outUIImage = [self function2:rgbData
width:u4_width
height:u4_height
stride:u4_stride];
return outUIImage;
}
【问题讨论】:
-
出于好奇:为什么需要使用动态内存分配(malloc's)?
-
如果不知道
function1、function2,就无法回答为什么您的图像是白色或黑色。 -
不相关但
pu1_out_buffer = datafromfile(FILE_PATH)= 无效语法和内存泄漏。MyFunction {也是无效的,除非是宏,请发个实例。 -
还有,你为什么要
malloc和BUFFER_LENGTH一样大,却骗NSMutableData告诉它(u4_stride * u4_height * 3)? -
rgb_buffer已被释放,这已在您之前的问题stackoverflow.com/questions/19380363/… 或其可能重复的stackoverflow.com/questions/18770265/… 中进行了解释。因此,使用rgb_buffer代替[rgbData bytes]不太可能“更好”。
标签: ios objective-c uiimage nsdata nsmutabledata