【发布时间】:2016-01-19 15:09:19
【问题描述】:
我创建了一个队列
dispatch_queue_t serialq = dispatch_queue_create("com.osletek.hill-billy", DISPATCH_QUEUE_SERIAL);
并将我的积木放入计时器事件中,我的内存使用量不断上升:
-(void) onTimer
{
__weak typeof(self) this = self;
dispatch_async(serialq, ^{
UIImage *img = [this screenShot];
// do something with img ...
});
}
}
没有队列,它工作正常:
-(void) onTimer
{
__weak typeof(self) this = self;
UIImage *img = [this screenShot];
// do something with img ...
}
}
我正在使用 ARC。
看起来如果 img 对象在队列中,它不会被释放。
我该如何解决这个烂摊子?
【问题讨论】:
-
尝试用
@autoreleasepool{}封装队列中的代码 -
@autoreleasepool {} 没有帮助。最终有帮助的是删除 UIImage 相关代码并改用 CGImageRef。如果不在主线程中使用 UIImage 确实会导致内存保留问题。
标签: objective-c memory-management objective-c-blocks