- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个 iPhone 应用程序,在其中分离一些线程以在后台执行长时间运行的工作,以免挂起 UI。我知道线程需要 NSAutoreleasePool 实例来进行内存管理。我不确定的是线程方法是否调用另一个方法 - 该方法是否也需要 NSAutoreleasePool?
示例代码:
- (void)primaryMethod {
[self performSelectorInBackground:@selector(threadedMethod) withObject:nil];
}
- (void)threadedMethod {
NSAutoreleasePool *aPool = [[NSAutoreleasePool alloc] init];
// Some code here
[self anotherMethod];
// Maybe more code here
[aPool drain];
}
- (void)anotherMethod {
// More code here
}
我问的原因是我收到错误消息,对象在没有池的情况下被自动释放,并且“只是泄漏”。
我见过其他问题,人们根本没有设置自动释放池,我理解为什么需要自动释放池。我特别感兴趣的是找出(在本示例中)threadedMethod
中创建的自动释放池是否适用于在 anotherMethod
中创建的对象。
最佳答案
回答你的问题,是的,另一个方法正在使用你在 threadedMethod 中创建的 NSAutoreleasePool,并且当 aPool 被释放/耗尽时,你自动释放的任何东西都会被释放。
因此,您的错误不太可能直接源于此代码(除非发生更多情况)。
在 _NSAutoreleaseNoPool 上放置一个断点(在“断点”窗口中按名称添加它)并在调试器中运行代码,当在没有池的情况下调用 autorelease 时,它将停止,这应该可以解决您的问题。
关于iphone - NSAutoreleasePool 跨方法承载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010629/
performSelectorOnMainThread with waitUntilDone:NO 和 withObject: 线程中自动释放的对象。 因此,在线程通过 [NSAutoreleaseP
每当我们调用autorelease方法时,它的对象都会转到NSAutoreleasePool。当池耗尽时,它会向池中的所有对象发送释放消息。 我的问题是; 在主函数中有一个NSAutoreleaseP
在我正在阅读的书中,它谈到了强制耗尽 NSAutoreleasePool 。这是否意味着创建一个本地 NSAutoreleasePool 然后耗尽它,而不是耗尽已经存在的池?也就是说,我不能两次或多次
我的程序中有一个函数可以创建新的小部件来表示数据,但是每当创建小部件时,我都会收到很多“AutoRelease with no NSAutoReleasePool in place”错误消息。由于 N
我正在构建一个 iPhone 应用程序,在其中分离一些线程以在后台执行长时间运行的工作,以免挂起 UI。我知道线程需要 NSAutoreleasePool 实例来进行内存管理。我不确定的是线程方法是否
编辑:感谢您的建议。我仍然不清楚自动释放池的实际处理方式。 这是实际的代码: import platform, time if (platform.system().lower() == "darwi
由于过度释放,我遇到了看起来像崩溃的情况,但据我所知我没有做错任何事情,但是我可能对 AutoreleasePools 和类变量有错误的想法。 如果我有一个类变量: UIImageView *imag
我正在关注有关 CSV 数据访问的 youtube 视频。但是我在框架中看到 NSAutoreleasePool 被指定为过时的。我们是否有其他方法来开发对 CSV 数据文件的访问权限? 最佳答案 @
结果会怎样?有没有泄漏或崩溃?? -(NSString)returnPersonName { NSAutorelease *pool = [[NSAutorelease alloc]init]; NS
我有一个方法需要在自己的线程中每秒运行 88 次(它是音频单元的回调。)我应该避免每次调用它时都创建 NSAutoreleasePool 吗? 最佳答案 创建 NSAutoReleasePool 本身
我有这个代码: NSNumber *num; NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init]; for (int i=0; i<
知道为什么我会收到这些消息: NSAutoreleasePool is unavailable: not available in automatic reference counting mode
在 iOS 应用程序开发中,我们使用 NSAutoreleasePool 在稍后的时间点放弃对象的所有权。 但是为什么不同线程之间可以共享呢? 当我想使用一个新线程时,为什么我们需要创建一个新的自动释
考虑以下程序: int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePoo
我正在关注“Programming in Objective-C”第 3rd 版,但我遇到了第一个示例的问题。 我一直收到这个错误: Semantic Issue: 'NSAutoreleasePoo
据我了解,使用 alloc、new 或 copy 创建的任何内容都需要手动释放。例如: int main(void) { NSString *string; string = [[NS
抱歉,我是 cocoa 编程的新手,我不确定我是否真正理解 nsautoreleasepool 的工作原理。 我读到的所有地方都说 NSAutoreleasePool 负责所有自动释放调用(谈论最后声
我询问了NSAutoreleasePool ,并了解在这种情况下我需要显式分配自动释放池。 int main() { NSAutoreleasePool *pool = [[NSAutorel
在我的 Cocoa 程序中,处理自动释放对象的一种非常简单的方法不是在应用程序委托(delegate)中创建一个调用以下方法的计时器对象,例如每 10 秒: if (pool) { // Re
+[NSThread detachNewThreadSelector:toTarget:withObject:] 的文档说: For non garbage-collected application
我是一名优秀的程序员,十分优秀!