我寫了一個將圖像加載到CALayer的方法。這是代碼:垃圾收集器和核心基金會
- (CGImageRef)loadImage:(NSString*)path {
// Get data image
CGImageRef image = NULL;
NSData *data = [NSData dataWithContentsOfFile:path];
CFDataRef imgData = (CFDataRef)data;
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (imgData);
// Get CGImage from CFDataRef
image = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
// If the image isn't a JPG Image, would be PNG file
if (!image)
image = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
return image;
}
我在CALayer的使用這個方法:
NSString *pathString = // my image path;
aLayer = [CALayer layer];
aLayer.contents = [self loadImage:pathString];
這是工作。我最終確定我的看法(使用垃圾回收器),但我的應用程序有泄漏。我應該釋放CFDataRef imgData嗎?我讀過垃圾收集器在Core Foundation中不起作用。
謝謝,原諒我的英語。
首先,謝謝你的回答。我應該如何寫完成方法?此代碼是否正確?: CGImageRelease(aLayer.content); aLayer = nil – Fernando 2010-10-07 16:45:07
內容由圖層保留,所以您可以在aLayer.contents賦值後立即釋放它。請記住,您不應該使用像loadImage這樣的名稱,而是使用createImage,因爲您擁有返回的圖像(請參閱Core Management的內存管理編程指南)。 – 2010-10-07 16:59:27
謝謝!我嘗試它。 – Fernando 2010-10-07 17:40:47