为什么@autoreleasepool不起作用

时间:2014-01-30 10:40:26

标签: ios memory timer grand-central-dispatch autorelease

我尝试在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。现在,它有效。

1 个答案:

答案 0 :(得分:2)

您正在使用调度队列,尽管调度队列确实管理自动释放池,但不保证它们被清空的时间/点。这意味着你的对象会在一段时间后释放。

我认为你的计时器过于频繁,因此你的内存无限增长(意味着你的对象没有机会解除分配并且你得到了内存警告)。

这是apple documentation。这是一个link的stackoverflow问题,它有一些很好的答案,请阅读它们。