作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然它在模拟器上似乎不会造成问题,但在设备上使用 performSelectorInBackground
会导致内存泄漏。或者至少 Instruments 是这么表示的。查看代码我没有任何线索可能是什么原因。我试图将受影响的代码剥离到最低限度,但仍然奇怪的是,每次执行这段代码时,Instruments 都会显示泄漏。
这里有什么异常情况吗?
//In viewcontrollerA:
-(void)mainLoop
{
[self.viewControllerB performSelectorInBackground:@selector(calculateTotals) withObject:nil];
//This gives the same problem
//[NSThread detachNewThreadSelector:@selector(calculateTotals) toTarget:self.viewControllerB withObject:nil];
//UI stuff ...
}
//viewControllerB:
-(void)calculateTotals
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//Heavy calculations ...
[pool release];
}
编辑:我仍在研究这一点,似乎泄漏是由于堆栈中的某个位置 [NSThread start] 后面永远不会跟着 [NSThread exit] 造成的。因此,似乎偶尔会有一个线程一直运行而从未结束。现在我的问题是,我可以做些什么来手动结束这些“悬而未决”的威胁吗?
最佳答案
也许你的一个线程抛出了异常?线程中的异常不会在调试控制台中报告,您必须捕获线程中的异常。
关于iphone - PerformSelector In后台泄漏在设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894237/
我是一名优秀的程序员,十分优秀!