4
我這樣的代碼:如何正確釋放CGImageRef?
CGImageRef ImageCreateWithFile(NSString *filePath)
{
if(NULL == filePath)
return NULL;
NSData *data = [[NSData alloc] initWithContentsOfFile:filePath];
if(NULL == data)
return NULL;
CGImageSourceRef isrc = CGImageSourceCreateWithData((CFDataRef)data, NULL);
// [data release];
CGImageRef image = CGImageSourceCreateImageAtIndex(isrc, 0, NULL);
CFRelease(isrc);
isrc = nil;
[data release];
data = nil;
return image;
}
- (IBAction)addClick:(id)sender
{
CGImageRef image = ImageCreateWithFile(@"/Users/user/t.jpg");
if(NULL != image)
_imageList.push_back(image);
}
- (IBAction)removeClick:(id)sender
{
if(_imageList.size() > 0)
{
CGImageRef image = _imageList[0];
CGImageRelease(image);
image = nil;
_imageList.erase(_imageList.begin());
}
}
的imageList
聲明如下:
std::vector<CGImageRef> _imageList;
這個程序寫了測試釋放CGImageRef
的方法。當我添加一些圖像時,我發現程序的內存使用量在活動監視器中定期上升,但在通過remove
方法刪除一個或多個圖像後,內存永遠不會下降。我不知道爲什麼釋放方法不起作用?任何幫助?謝謝!!!
從不依靠活動監視器的剖析。改用儀器。 –