我尝试在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/

10-11 07:54