【发布时间】:2013-03-25 23:27:25
【问题描述】:
我有一个内存问题,小应用程序每 X 毫秒获取无限量的屏幕截图并将它们显示在图像视图中。即使使用自动释放,它也会很快淹没内存。代码如下:
- (void)draw {
do {
@autoreleasepool {
CGImageRef image1 = CGDisplayCreateImage(kCGDirectMainDisplay);
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage:image1];
NSImage *image = [[NSImage alloc] init];
[image addRepresentation:bitmapRep];
_imageView.image = image;
[NSThread sleepForTimeInterval:1];
}
}while(true);
}
有什么想法吗?
【问题讨论】:
-
你不能在没有 ARC 的情况下使用 @autoreleasepool。
-
@RamyAlZuhouri:是的,你可以。它与 ARC 同时引入,但不需要 ARC。
-
由于您永远不会将控制权返回给运行循环,我假设这是在后台线程上运行的。您正在访问一个 UI 控件 (
_imageView),它只允许在主线程上使用。您可能应该将其更改为dispatch_async(dispatch_get_main_thread(), ^{ _imageView.image = image; }); -
我忘了在原帖中提到它,但是是的,我确实使用了 ARC,是的,这个循环在它自己的线程中运行。但是谢谢大家,用 CGImageRelease(image1); 明确发布图像;做到了
标签: objective-c xcode memory-leaks screenshot autorelease