2012-07-30 103 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