Objective c 在一个周期内使用NSReadPixel时内存泄漏

Objective c 在一个周期内使用NSReadPixel时内存泄漏,objective-c,xcode,nsimage,Objective C,Xcode,Nsimage,我试图在一个周期内调用这个方法,在我将迭代次数增加到几千次之前,一切都正常。然后,在一个周期结束后返回的内存将超过1GB。如何避免这种损失 - (char) getPixelColorAtLocation: (CGPoint)point { NSImage *image = sampleImageView.image; [image lockFocus]; NSColor *aColor = NSReadPixel(point); [image unlockFocus]; return 'r

我试图在一个周期内调用这个方法,在我将迭代次数增加到几千次之前,一切都正常。然后,在一个周期结束后返回的内存将超过1GB。如何避免这种损失

- (char) getPixelColorAtLocation: (CGPoint)point {

NSImage *image = sampleImageView.image;
[image lockFocus];
NSColor *aColor = NSReadPixel(point);
[image unlockFocus];

return 'r’; // just for debugging 
//some code here
}

哦,将-lockFocus移到方法之外真的很容易,非常感谢

调用
-lockFocus
会生成图像的快照。这不是一件容易的事。将焦点的锁定和解锁移到紧环之外,您应该会没事的

或者,您可以找到另一种从图像中读取像素数据的方法。不幸的是,事实证明这比看起来应该的要难一些。如果是我,我会创建一个带有特定预分配后备内存的CGBitmapContext,将图像绘制到其中,然后根据创建上下文时指定的后备内存格式的知识读取像素数据。这并非不可能,但远没有调用
NSReadPixel
那么简单

我突然想到。。。您还可以将方法主体包装在
@autoreleasepool
中。这将阻止巨大的内存增长,但性能将是非常糟糕的,因为每次调用该方法都会生成图像的新快照等。对于未来的读者,不要这样做,但为了完整性,它将解决问题的内存部分