![]() |
1
6
简而言之,编译器比您想象的要聪明;)。这些错误意味着您在没有分配NSAutoReleasePool的上下文中自动释放各种对象(NSString、NSDictionary、NSNumber)。例如,项目的主.m文件应该声明一个自动释放池:
在许多应用程序中,这将是唯一分配的池。没有这个池,你就不能自动释放任何东西,如果你试图自动释放,它没有池去,所以它实际上成为一个泄漏。检查您的主要功能,确保分配了NSAutoReleasePool。 在其他情况下,您可能希望声明另一个NSAutoReleasePool。最常见的情况是在新线程中调用选择器。每个线程都必须有自己的nsAutoReleasePool。有关详细信息,请参阅第36张幻灯片 Stanford University CS193P 第10讲:
另一个例子是一个昂贵的循环,其中您正在自动释放许多对象。与其让主要的nsautoreleasepool增长到一个巨大的规模,你会发现在循环中每隔n次创建一个新的nsautoreleasepool将有助于将资源使用保持在最低水平。其中一些代码还借用了上面列出的演讲幻灯片:
也许您有一些这样的代码,它们并不总是按预期分配或释放池。不过,我不确定编译器是否足够聪明,无法注意到这种类型的问题。 |
![]() |
2
1
这些警告可能是因为工具本身存在泄漏。但是,如果没有设置自动释放池,那么这些类型的消息就是您在线程中运行或在后台执行选择器时看到的。 |
![]() |
3
0
即使有漏洞,大多数程序也能正常运行,…但不管怎样,我认为你没有显示足够的信息。 我猜你发送的是一个对象自动释放在没有池的地方?洛尔 你试过乐器吗? |