2

我得到这样的 NSImage :

imageG = [[[NSImage alloc] initWithSize:NSMakeSize(imageN.size.width, imageN.size.height)] autorelease];
[imageG addRepresentation:[NSCIImageRep imageRepWithCIImage:result]];

结果真的很好。所以我认为没有错误。然后我尝试像这样将此图像转换为 NSData:

 NSData *imgData = [imageG TIFFRepresentation];

我收到错误:

Thread 1: EXC_BAD_ACCESS (code=13, adress=0x0)

在那条线上。我的错误在哪里?

4

1 回答 1

1

您在创建对象时需要retain它,当您要求它进行数据重新定向时,它似乎正在被重新分配。

imageG = [[[[NSImage alloc] initWithSize:NSMakeSize(imageN.size.width, imageN.size.height)] retain] autorelease];

通常,如果您从初始化程序创建对象 - 而不是工厂方法 - 您应该保留并自动释放它。这样做的好处以及其他关于内存管理的好技巧可以在以下位置找到:为什么要自我实现的 getter 保留并自动释放返回的对象?

还需要注意,这BAD_ACCESS表明存在某种内存问题。

于 2012-07-30T10:43:42.157 回答