我尝试在autoreleasepool
块中使用dispatch_async
,但使用it doesn't release the str
。重复调用timerEvent时,将导致内存不足的问题。
- (void)viewDidLoad
{
[super viewDidLoad];
[NSTimer scheduledTimerWithTimeInterval:0.0001 target:self selector:@selector(timerEvent) userInfo:nil repeats:YES];
}
-(void)timerEvent
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
@autoreleasepool {
NSString *str =[NSString stringWithFormat:@"%d and %d",px,py];
NSLog(str);
}
});
}
感谢您的帮助。
-----解决了---------------感谢C_X
定时器间隔设置太小。就我而言,我发现它至少应为0.004。现在,它可以工作了。
最佳答案
尽管调度队列确实管理自动释放池,但您正在使用调度队列,但不能保证清空它们的时间/点。这意味着您的对象将释放,但会在一段时间后释放。
我认为您的计时器太频繁了,因此您的内存将无限增长(这意味着您的对象没有机会进行释放并且收到了内存警告)。
这是苹果documentation。这是一个stacktflow问题的link,它有一些不错的答案,请仔细阅读。
关于ios - 为什么@autoreleasepool不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21454112/