2012-07-30 732 views
2

我NSImage中得到这样的:NSImage中转换到NSData的

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) 

在该行。我的错误在哪里?

回答

1

需要retain您的对象当您创建它时,它显示在您要求其重新定向数据时它将被重新分配。

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

一般来说,如果你创建从初始化的对象 - 而不是工厂方法 - 你应该保留并自动释放它。这样做的好处以及有关内存管理的其他好的技巧可以在以下网址找到:Why should a self-implemented getter retain and autorelease the returned object?

这也可以方便地注意到BAD_ACCESS表示某种内存问题。

+0

太好了。非常感谢你 – hockeyman 2012-07-30 10:47:12