【发布时间】:2012-08-07 10:13:38
【问题描述】:
在这个问题上坐了几个小时后(我真的感觉像龙蛋上的鸡)我来这里问。
问题是:我的计时器有一个异步队列(使用 mach_absolute_time() 创建),在一段时间间隔后将 NSNotification 提供给 defaultCenter,然后运行我的方法。在 run 方法中,有一个用于查找视图交集的方法调用。我最近切换到 ARC,因为这似乎是一个非常好的主意。现在我有点后悔了,因为在 ARC 之前,这段代码确实正确地分配和解除分配,但现在它只分配自己。也许我错过了一些手动解除分配的代码,但是,当我尝试将视图设置为 nil 时,它根本没有帮助。此外,在 Allocations 中,由于 intersect 方法,malloc 4.00 KB 不断增加,这就是我问的真正原因,因为一段时间后,它达到了限制,我收到内存警告并且我的应用程序崩溃。
我需要这种方法的原因是我遍历了带有障碍物的视图子视图。当另一个视图与某些子视图的距离达到限制时,我会运行一些代码。
所以现在有一些代码: 这是分配这么多内存的方法,正是它的第一行(在 ARC 之前,它更长,但我减少了它以获得创建分配的东西)。当我删除它时,无限分配停止。再次提醒一下:这个方法每秒被调用很多次,并且在与主队列不同的队列中。
- (BOOL)obstacleIntersect {
UIView *view = [[self subviews] objectAtIndex:0];
return NO;
}
这就是它在分配中的样子: Mallocations
感谢您的帮助和阅读,因为您刚刚回答了这个冗长的问题。
编辑: 这就是代码在所有功能等方面的外观。我只用一行发布上面的代码的原因是因为现在我不在乎它是否像它应该的那样工作,我只想解决分配问题。抱歉误导。至于 uiview 粒子,它是与已经提到的子视图相交的视图。此代码也产生相同的无限分配。
- (BOOL)obstacleIntersect {
for(UIView *view in [[[self subviews] objectAtIndex:0] subviews])
{
if (sqrt(pow(abs(particle.center.x - view.center.x), 2) + pow(abs(particle.center.y - view.center.y), 2)) < particle.frame.size.width / 2 - 1)
{
return YES;
}
}
return NO;
}
【问题讨论】:
-
感谢您尝试使其更简单!所以你仍然遇到单一分配(view =)以及快速枚举(for view in...)的问题?
-
是的!没错,新malloc 4.00 KB的频率也差不多。
标签: objective-c ios5 memory-management uiview automatic-ref-counting